如何在终端中从任意路径运行.sh脚本?

16

我知道如何运行我创建的脚本。但是要在终端中更改目录并运行我的脚本,这是一件痛苦的事情。

我需要运行的 slowloris 脚本在桌面上,现在需要更改目录到桌面并运行。

然后我在根目录有另一个脚本,现在需要更改目录到根目录并运行该脚本。

我的问题是: 如何仅通过在任何路径输入./script 来运行任何 shell 脚本,就像我们通过在任何路径中输入 msfconsole 来启动 Metasploit 一样。


3
最简单的方法就是选择一个目录来存放你的脚本(或者软链接到你的脚本),确保该目录在你的路径中。在Linux上,一个合适的选择是 /usr/local/bin。然后,只需确保你的脚本是可执行的(例如 chmod +x <脚本名>)。 (在选择“脚本名”时,建议使用 which 脚本名type 脚本名 来检查是否已经有其他程序使用了该名称)。将脚本所在位置添加到路径中,并使其可执行后,你可以通过输入“脚本名”在任何地方运行它。 - David C. Rankin
Shell脚本是“shell脚本”,而不是“.sh脚本”,也不需要文件扩展名。特别是Bash脚本,不应使用.sh扩展名,因为该扩展名意味着可以使用sh scriptname.sh运行脚本,而任何带有bash扩展名的脚本都不能保证以这种方式运行。 - Charles Duffy
从任何地方键入“./script”都永远不会运行除当前目录(也称为“./”)外的脚本。即使在您的“PATH”中有名为“script”的内容,调用“./script”也会告诉shell“不要查找$PATH,我想运行此处正确的那一个”,如果实际上没有这样的脚本,就会产生明显的后果... - twalberg
2个回答

17

一种选择是直接输入脚本的路径:

~/Desktop/script

这样做是有效的,但会变得有些笨重。
这就是环境变量PATH的用途。而$HOME/bin也是为此而设立的。
1.创建一个目录$HOME/bin。把所有可执行脚本放进去(如果需要,使用chmod +x script使它们变成可执行文件)。这样,你只需在一个地方寻找要运行的脚本。
2.将$HOME/bin添加到PATH中。我把它放在前面:PATH="$HOME/bin:$PATH,但如果你喜欢,也可以放在后面。
3.更新你的.profile.bash_profile(或可能是.bashrc)文件以设置PATH。不过要注意不要让PATH无限增长。
作为 tripleee 所指出的, 一旦将命令安装在 PATH 上的目录中,您就不再需要输入 ./script,而只需输入 script。这与您输入 ls 而不是 /bin/ls 等完全相同。一旦程序安装在您的 PATH 目录中,它(对于许多用途)与系统提供的命令无法区分。
我有大约 500 个脚本和程序在我的 $HOME/bin 目录中。
请注意,这不需要任何特殊权限。如果您具有管理员访问权限,并且认为其他用户可能会发现您的命令有用,则可以将脚本/程序安装在其中一个系统提供的目录中,该目录位于您的 PATH 上。然而,最好不要将程序添加到以下任何一个中:
  • /bin - 存放系统启动时所需的基本命令。
  • /usr/bin - 存放系统安装的软件和应用程序的可执行文件。
  • /sbin - 存放只有管理员可用的命令。
  • /usr/sbin - 存放只有管理员可用的系统命令。

通常还有/usr/local/bin,适合存放没有系统提供的广泛使用的命令。


†† 最好使用chmod a+x,go-w script ;您的脚本不应该被其他人写入。 您甚至可以简单地使用chmod 555 scriptchmod 755 script。 我倾向于保持我的脚本不可写。 这样,我必须通过版本控制系统进行正式更改过程。 这意味着减少了未受控制的更改的危险。


尽管语法显然是script而不是./script - tripleee
@Jonathan Leffler有一个非常好的解释。实际上,我认为最好的方法是将slowloris脚本添加到您的$PATH环境变量中。这样,您可以在任何地方运行slowloris而不需要./slowloris(因为./表示“从此目录运行”)。我想向您指出一个很好的例子!https://askubuntu.com/questions/60218/how-to-add-a-directory-to-the-path - amc

3

您需要将脚本复制或链接到$PATH上的目录中。通常,/usr/bin/usr/local/bin/都在路径上,因此这些是将脚本链接或复制到的好位置。

ln -s /path/to/your/script /usr/local/bin

如果您不是root用户,则需要使用sudo命令或以root用户身份运行该命令。


我遇到了一个错误:“ln:/usr/local/bin:目录不允许硬链接”。 - NIKHIL C M
1
@NIKHILCM — 如果你收到了关于硬链接的错误提示,那么这意味着你忘记加上“-s”选项。 - Jonathan Leffler
一旦我们创建了软链接,我们就不需要输入 ./script,只需输入 script 即可。 - dlmeetei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接