【发布时间】:2009-07-13 20:51:22
【问题描述】:
我对 Linux 环境编程还很陌生,所以我不知道要搜索什么才能自己回答这个问题。我需要了解应用程序如何设置 shell 以接受某个命令来启动它们。例如,您可以通过执行以下命令从命令行启动 Firefox:firefox。
我不知道这是在哪里定义的。生成文件?配置脚本?在源代码本身?
任何关于 Linux 编程花絮的资源/阅读都将不胜感激!
谢谢。
【问题讨论】:
标签: linux bash command-line
我对 Linux 环境编程还很陌生,所以我不知道要搜索什么才能自己回答这个问题。我需要了解应用程序如何设置 shell 以接受某个命令来启动它们。例如,您可以通过执行以下命令从命令行启动 Firefox:firefox。
我不知道这是在哪里定义的。生成文件?配置脚本?在源代码本身?
任何关于 Linux 编程花絮的资源/阅读都将不胜感激!
谢谢。
【问题讨论】:
标签: linux bash command-line
Firefox 是通过命令“firefox”启动的,因为在 $PATH 环境变量中的一个文件夹中存在一个名为“firefox”的可执行文件。
【讨论】:
您是在谈论 PATH 变量吗?看来你是。
在 linux 中,您应该能够键入:“echo $PATH”(不带引号)并获得以“:”分隔的程序所在位置列表(如 firefox)。
如果你需要在你的路径中添加一些东西,你应该可以这样做:
export PATH=$PATH:/another/directory
在你的 shell(很可能是 bash)中
您也可以输入:
which firefox
显示 Firefox 可执行文件的位置。
【讨论】:
通常,shell 会设置一个名为 $PATH 的环境变量。这只是当有人键入命令时要查看的所有目录的有序列表。一旦它找到一个与键入的名称相同的可执行文件(我的意思是您具有执行权限的文件,而不是以 .exe 结尾的文件),它就会运行该文件。 $PATH 中的常用目录可能是 /bin、/usr/local/bin、~/bin 等。
因此,当您键入“firefox”时,shell 会查看 $PATH 中的所有目录,直到找到 /usr/local/bin/firefox,然后运行该目录。为了使您自己的程序以相同的方式运行,您需要将它们(或指向它们的符号链接)放在可能位于每个用户路径中的目录中(/usr/local/bin/ 是一个不错的选择),或者您需要让您的用户将您的程序目录添加到他们的 $PATH 中。
有关更完整的描述,请参阅有关 $PATH 变量的Wikipedia article。
【讨论】:
作为前面提到的修改 $PATH 的替代方法,您还可以将可执行文件复制或链接到 $PATH 中已有的目录之一。更具体地说,/usr/local/bin/ 在大多数 UNIX 系统上都可以用于这个目的(在操作系统的默认包管理之外安装软件)。
【讨论】:
它必须像其他人提到的那样位于路径中,但您可能还需要通过以下方式使其可执行:
chmod +x /path/to/file
如果它是一个脚本,通常在顶部有一个 shebang,告诉操作系统使用什么来执行它:
#! /usr/bin/python
【讨论】:
通常,大型软件包安装在/opt 中,带有包装脚本或PATH 某处的链接。例如,在我的系统上,Google Picasa 安装在/opt/google/picasa 中,并且在/usr/bin/picasa 到/opt/google/picasa/3.0/picasa 有一个符号链接
Firefox 在我的系统上位于 /usr/bin/firefox,这是一个指向 /usr/bin/firefox-3.0 的符号链接,它本身就是指向 /usr/lib/firefox-3.0.11/firefox.sh 的符号链接 - 该 shell 文件不断摸索,直到它最终运行 /usr/lib/firefox-3.0.11/firefox(除非它找到原因做其他事情)。最后,这是一个二进制可执行文件。所以/usr/lib 是安装firefox 的位置,对我来说。
您可以使用此命令找出程序的位置:
type -a firefox
然后,你可以看看它使用的是什么类型的文件:
file /usr/bin/firefox
另请参阅Filesystem Heirarchy Standard,了解有关文件和程序的推荐位置的更多信息。
【讨论】: