我正在创建一个可以从命令行调用的程序,比如./prog arg1 arg2
。我想知道,我怎么能这样做,以便我可以从系统的任何地方运行它?我知道我可以将prog
放入/usr/bin/
,但如果我的程序需要来自其安装目录的资源(可以是用户下载它的地方),该怎么办?
答案 0 :(得分:1)
将程序所在的目录放入path
环境变量中,或将程序移动到path
中已有的目录之一(通常需要超级用户权限,我认为你没有因为那时你不会问这个问题。)
将目录添加到搜索路径的前面,让系统在tcsh
上刷新其数据库,比如说
setenv "my/directory:"$PATH
rehash
在bash
,我认为,它是
PATH=/my/directory:$PATH
export PATH
(无需重新拍摄)。请注意,上述命令将您的目录放在搜索路径的顶部,即在任何其他路径之前搜索这些目录。因此,如果您的程序被称为“gcc”,那么您的程序将被执行而不是GNU C编译器。或者,您可以将目录添加到搜索路径的末尾,在这种情况下,只有在搜索路径中的任何其他目录中找不到其他同名程序时,才会选择程序。
答案 1 :(得分:1)
您可能还想熟悉Linux Filesystem Hierarchy:“什么在哪里”的标准定义。以下是更多信息:
环境变量可以全局定义(“为每个人”,例如/etc/profile
),或在本地定义(“每个用户”,例如~/.bashrc
)。以下是您的一些选择的总结:
答案 2 :(得分:0)
使用prog arg1 arg2
执行程序时,感谢您的shell,它在$ PATH环境变量中搜索程序所在的文件夹。 (尝试env | grep PATH
查看这些文件夹)。
你需要eather在这个变量中添加一个新目录(export PATH="/new/directory/path/:$PATH"
如果在bash下,setenv PATH "/new/directory/path/:$PATH"
如果使用tcsh)或者复制你的程序和它需要在其中一个PATH中执行的所有文件文件夹中。
答案 3 :(得分:0)
有两种处理方式(Makefile与它们无关)
您的安装程序可以将文件放在所需的位置,因此您的程序无需搜索 - 它可以使用硬编码路径。或者您可以将数据目录的路径放入另一个文件中,该文件将被硬编码(例如/etc/programname.config)。
您将所有内容放入一个目录(通常类似于/ opt / programname)。当然,你也可以对它进行硬编码,或者你的程序可以在/ proc / pid / exe文件中读取链接()很有可能(但不能保证。特别是,如果例如使用符号链接来指示/ usr / bin / programname到你的/ opt / programname / bin / programname或者其他什么,但是如果那是一个硬链接就行不通了) 获取可执行文件的路径。从那里你应该能够访问你的数据文件。
如果更喜欢第二种解决方案,那就是我。第一个解决方案适用于包管理器,如果你真的没有很多数据文件,它就不那么过分了。