无需指定目录即可执行程序?

无需指定目录即可执行程序?

为什么我必须输入/etc/init.d/apache2 (args)才能运行 apache?

难道就没有办法吗apache2 args??

答案1

您通常不需要键入命令来运行 Apache:它会在系统引导时启动。/etc/init.d如果您的系统设置正确,启动服务中的脚本会在启动时自动执行。对于大多数发行版,服务默认处于启用状态,并且除非您执行了某些操作来禁用它们,否则它们将会启动。

如果您已经停止了 Apache 并且想要重新启动它,/etc/init.d/apache2 start这是正常的方式 - 或者最好是service apache2 start。使用较短的命令没有什么用处,因为这不是正常系统使用的一部分。通用命令可以在不指定完整路径的情况下执行;这些命令位于PATH环境变量(Windows 模仿的)中列出的目录中。

答案2

您可能应该使用该service命令来启动它。

service apache2 start

并且 apache 参数应该在您的/etc/apache2结构中。

答案3

这是因为 $PATH 中未设置 /etc/init.d/。

它本质上是一个以 : 分隔的目录列表。当您执行命令时,shell 会逐个搜索这些目录,直到找到可执行文件所在的目录。 (http://www.cs.purdue.edu/homes/cs348/unix_path.html

答案4

有很多方法可以调用不在您的PATH.

了解这些方法是很好的 - 但是,如果您发现自己只是为了执行命令而使用所有更奇特的特技,那么这将表明系统设计不太理想。

假设这是您的脚本,名为s,您将其放入/home(以使其无法访问,因为它/home肯定不在您的 中PATH):

echo "The first argument is: $1"
echo "The second argument is: $2"

在不给出绝对路径的情况下仍然可以到达它的三种方法是:

别名:alias salias='/home/s'

一个函数:sfunc () { /home/s $@ }

一条链接:ln -s /home/s slink

前两个,如果您再次使用它们,您需要放入 shell 初始化文件(.bashrc对于 bash、.zshrc对于 zsh 等)。要使用链接(第三种情况),您必须将其放在您包含的目录中PATH,或者,您可以使用绝对路径显式调用它(例如,如果您位于同一目录中,则./slink one two) 。

相关内容