如何在Linux中使用相对路径打开文件?

2024-04-23

我有一个程序,它使用相对路径(例如“..”)打开文件。

现在的问题是,当我从另一个目录执行程序时,相对路径不是相对于程序而是相对于工作目录。因此,如果我使用“/path/to/program/myprog”启动程序,它将无法找到该文件。

有没有办法独立于工作目录执行程序? Id est,如如果工作目录是程序所在的目录?或者我只是以一种过于复杂的方式思考,有一种更简单的方法来引用文件,哪个位置只能通过其相对于程序文件路径的路径来知道?


如果程序本身不这样做,那么它就是一个糟糕的程序。糟糕的程序应该用一些 Bash 脚本来包装:

#!/bin/bash

set -e
cd $(readlink -f $(dirname $0))
exec ./myprog $*

上面的脚本确定它所在的目录,然后将当前工作目录更改为该目录并运行程序myprog从那里,透明地传递所有参数。因此,您必须将此脚本放入您的程序所在的同一目录中并运行它而不是您的程序。

假设您有权访问源代码并且可以修复程序,然后使用proc fs http://en.wikipedia.org/wiki/Procfs确定程序的位置,然后使用绝对路径。

例如,/proc/self/exe将始终是指向当前进程的二进制文件的符号链接。使用readlink http://linux.die.net/man/2/readlink读取它的值,然后剪切可执行文件名称,你就得到了目录。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Linux中使用相对路径打开文件? 的相关文章

  • 从汇编程序获取命令行参数

    通读 专业汇编语言书籍 似乎它提供了用于读取命令行参数的错误代码 我纠正了一点 现在它从段错误变成了读取参数计数 然后是段错误 这是完整的代码 data output1 asciz There are d params n output2
  • 来自 RAZOR 中不同文件夹的 RenderPartial

    我一直在尝试将我的 aspx 页面转换为 cshtml 并且在从另一个文件夹渲染部分页面时遇到问题 我以前做过的事 我认为等价的是 Html RenderPartial Views Inquiry InquiryList cshtml Mo
  • 删除 QComboBox“下拉”动画

    我正在使用 Qt 4 8 并且想在单击 QComboBox 时摆脱 下拉 动画 我也想稍微移动一下 到目前为止 我一直在考虑重新实现 showPopup 和 hidePopup 但不知道如何使其工作 此外 每次我尝试使用 CSS 进行移动或
  • OpenGL 着色器不与着色器程序链接

    我正在尝试使用 GLFW GLEW 添加着色器 我收到一个错误 指出着色器已加载 但它们没有有效的对象代码 这是我用于加载着色器的代码 class SHADER public void LoadShaders const char vert
  • web请求超时处理?

    HttpWebRequest request HttpWebRequest WebRequest Create url request Timeout 20000 using WebResponse response request Get
  • Control.Invoke 在隐藏的 ShowDialog 中“卡住”

    我有解决这个问题的方法 但这不是我第一次被咬 所以我试图确切地了解发生了什么 从我的申请中 我ShowDialog表单 表单上有一个按钮 单击该按钮时会调用另一个 非 GUI 线程上的代码 非 GUI 线程发回状态 Pushed then
  • 如何使用 Moq 模拟 Web 服务调用?

    The using下面点击了我不想实际点击的外部资源 我想测试someResult以及使用它的代码 但每次我运行单元测试时 该代码仍然尝试访问真正的 Web 服务 如何使用最小起订量来伪造对 Web 服务的真实调用 但不模拟使用中的其余代码
  • 如何BSWAP 64位寄存器的低32位?

    我一直在寻找如何将 BSWAP 用于 64 位寄存器的低 32 位子寄存器的答案 例如 0x0123456789abcdef位于 RAX 寄存器内 我想将其更改为0x01234567efcdab89用一条指令 因为性能 所以我尝试了以下内联
  • 更改 RabbitMQ 队列中的参数

    我有一个 RabbitMQ 队列 最初声明如下 var result channel QueueDeclare NewQueue true false false null 我正在尝试添加死信交换 因此我将代码更改为 channel Exc
  • 私有方法和属性的 JetBrains Rider C# 命名风格

    我想将私有方法的首字母设为小写 将公共方法的首字母设为大写 然而 在 Rider 中 C 命名风格下似乎只有一个选项可以应用所有方法 属性和事件 告诉 Rider 仅对私人使用不同约定的最佳方式是什么 也可以看看 私有方法和属性的 ReSh
  • 使用事件处理程序与覆盖事件触发方法

    我正在创建 Button 的子类 并希望向其某些事件 例如 OnClick 添加自定义功能 哪种方式更理想 我是否重写 OnClick protected override void OnClick EventArgs e base OnC
  • 在函数内部使用时,c 数组大小会发生变化

    我有这段代码 include
  • 函数的动态返回类型

    如何创建一个具有基于参数类型的动态返回类型的函数 Like protected DynamicType Test DynamicType type return 为此 您必须使用泛型 例如 protected T Test
  • 如何检查单元格是否为空 (Excel\VisualC#)

    我的目标是逐行检查Sheet1为了发现有多少行 所以我放了一个 do while 一旦到达空白单元格就应该停止 Example 第 1 行数据第2行数据第3行数据第4行数据第5行数据 第 6 行数据第7行数据 在本例中 我只需要前 5 行
  • 除了 iptables 之外还有数据包管理实用程序吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 Linux 实用程序 它可以根据一组规则更改网络数据包的有效负载 理想情况下 我会使用
  • 执行按钮单击时使 wpf UI 响应

    在我的 wpf c 应用程序中 当用户按下按钮时会执行一个很长的过程 当按下按钮直到执行完整的代码时 窗口将冻结 用户无法在窗口中执行任何其他任务 如何使按钮单击代码作为后台进程 以便窗口响应用户 我尝试过以下方法 但没有成功 privat
  • System.Globalization.CultureInfo 不包含 Name 的定义

    我对 System Globalization CultureInfo 类和 System Globalization 命名空间有这个特殊问题 我从具有 CultureInfo 属性的 API 调用返回一个对象 语言 我能够成功地将其在客户
  • Qt、PushButton、id 属性?有什么方法可以知道点击了哪个按钮

    void MainWindow addRadioToUI int button cunter 4 while database isEmpty button cunter QPushButton one new QPushButton Pl
  • 指向数组的指针 int (*ptr)[]

    我想了解指向数组的指针如何工作 代码片段 include
  • 检测 Windows 重新启动是否是由于 Windows 更新造成的

    我的电脑上的一些应用程序一直在检测 Windows 更新是否重新启动 这是可以观察到的 因为它们会在 Windows 更新自动重启后重新启动 这非常有帮助 因为这些应用程序会重新加载更改 甚至unsaved更改或恢复选项卡 如果是浏览器 执

随机推荐

  • Gmail API。如何获取消息标签

    如何获取消息labelIdGoogle Service Gmail Message或通过messageId 像这样的东西 messages gmailService gt users messages gt listUsersMessage
  • 从 XML 转换为 SQL Server 日期时间时出现毫秒错误

    我遇到了将日期时间从 XML ISO8601 yyyy mm ddThh mi ss mmm 转换为 SQL Server 2005 日期时间相关的问题 问题是转换毫秒时错误 我已经使用 nvarchar 中的 Convert dateti
  • vuejs 每周日历不显示事件

    每周日历无法正确显示事件 甚至是来自的片段代码https vuetifyjs com en components calendars https vuetifyjs com en components calendars还给我一个空日历 我
  • Python 使用 @unittest.expectedFailure 为单元测试引发 _ExpectedFailure

    我有两个系统运行同一组 Django 单元测试 一些测试使用 unittest expectedFailure装饰师 在一个系统上 这些运行良好并在测试运行结束时报告OK expected failures 10 unexpected su
  • GMap - 无法检测到点击多边形

    IsMouseOverMarker属性检测到点击标记就好了 但是当尝试使用时IsMouseOverPolygon的财产GMap控制检测用户是否单击多边形线 它似乎不起作用 Note PolygonEnabled的财产GMap控制设置为 Tr
  • 适用于 Android 的最佳 json rpc 2.0 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有用 php 编写的 json rpc 2 0 服务器 目前我正在寻找一个允许自动生成 json r
  • 如何在没有科学计数法的情况下显示“toPrecision”的结果?

    基于http www mredkj com javascript nfbasic2 html http www mredkj com javascript nfbasic2 html 以下代码将导致5 6e 2 num 555 55 res
  • 不同 zlib 压缩级别的压缩比

    我正在考虑使用什么级别的 zlib 压缩 并且我很好奇可以在 zlib 命令中指定的不同压缩级别的不同压缩率 这zlib手册 http www zlib net manual html Constants具有以下用于指定压缩级别的常量 de
  • Mongoose 默认值是否应用于现有文档?

    如果我向 Mongoose 架构添加属性并为其指定默认值 现有文档在加载时是否会收到这些默认值 是的 但如果查询是lean 对于返回完整 Mongoose 文档对象的查询 Thing find 每当属性丢失时都会返回默认值 无论架构何时更改
  • 按日期字符串索引时间序列

    给定一个时间序列 s 使用日期时间索引 我希望能够通过日期字符串对时间序列进行索引 我是否误解了这应该如何运作 import pandas as pd url http ichart finance yahoo com table csvs
  • 错误:“us”中的 Dialogflow 服务器收到了对位于“europe-west2-dialogflow.googleapis.com”中的资源的请求。

    我想使用对话流检测意图 但由于某些原因 我的对话流代理所在区域是 europe west2 因此 为了指定位置 我使用 Dialogflow API 的 v2beta1 版本 如文档中所述 但它不起作用 我有以下错误Dialogflow s
  • Scala:研讨会建议

    我被邀请为 PHP 观众举办一个 Scala 研讨会 这些人中的很多人根本没有接触过函数式编程语言 所以我想知道如何以某种方式介绍他们 以便他们充分利用它 我听说很多人很难理解高阶函数等 你有什么经历 我不想用太先进的东西吓跑他们 也不想让
  • 删除 ImageView 会导致某些手机崩溃

    因此 出于某种原因 在我的 Samsung Galaxy S2 Android 版本 4 0 4 上尝试从relativelayout 中删除 ImageView 时 我得到了 NPE 这是运行的代码行 mainView removeVie
  • 多周期持久化、向量化、时间序列python

    我有一个包含每日值的 DataFrame 并且我正在使用各种方法来预测未来两周的值 作为一个基础的 天真的预测 我只想简单地说今天的价值是未来两周的最佳预测 例如 的值01 Jan 2012 is 100 那么我想要预测02 Jan 201
  • 在 RecyclerView android 中拖放期间面临位置值问题

    如何在 RecyclerView 适配器中拖放时获取新的位置值 拖放工作正常 但是当我设置 setOnClickListener 打开我的详细活动时 它给了我旧的位置值 例如 如果我拖动第二个项目 INDEX 1 并放在第一个项目的位置 I
  • 隐藏图中某些图形对象的 MATLAB 图例条目

    MATLAB 图例列出了绘图中的所有内容 包括您在绘图上放置的指南 绕过这个问题的软糖就是要做的 Plot Add legend Add guidelines 然而 MATLAB 将最新的行放在前面 这意味着指南将位于显示的数据之上 丑陋且
  • varchar 变量的字符串比较失败

    我无法理解为什么会得到以下结果 declare myVar1 varchar Friday declare myVar2 varchar 10 Friday select case when myVar1 Friday then yes e
  • UiAutomator getLastTraversedText()

    我试图使用 Android UiAutomator 测试 Android Webview 据我了解文档 http developer android com tools help uiautomator UiDevice html getL
  • Python 中匹配“中文+数字”模式的正则表达式

    在Python 3 3中 我想匹配下面的模式 但它总是失败 摄氏零下253 我使用了下面的正则表达式 x00 x47 x58 x7F 它不是排除除数字之外的所有 ascii 吗 根据您使用的编程语言 您可以使用以下内容 p Han p N
  • 如何在Linux中使用相对路径打开文件?

    我有一个程序 它使用相对路径 例如 打开文件 现在的问题是 当我从另一个目录执行程序时 相对路径不是相对于程序而是相对于工作目录 因此 如果我使用 path to program myprog 启动程序 它将无法找到该文件 有没有办法独立于