【问题标题】:How to run a .sh-script from any path in a terminal?如何从终端中的任何路径运行 .sh 脚本?
【发布时间】:2015-05-27 21:54:53
【问题描述】:

我知道如何运行我创建的脚本。但是我需要通过终端更改目录并运行我的脚本是一个痛苦的问题。 我需要运行slowloris 脚本,该脚本已进入桌面,现在将目录更改为桌面并运行。

然后我在 root 中有另一个;现在将目录更改为 root 并运行它。

我的问题是: 我怎样才能通过从任何路径输入 ./script 来运行任何 shell 脚本,就像我们通过从任何路径提供 msfconsole 从任何路径启动 Metasploit 一样。

【问题讨论】:

  • 最简单的方法是选择一个目录来保存您的脚本(或脚本的软链接)并确保它在您的路径中。在 Linux 上,合理的选择是 /usr/local/bin。然后只需确保您的脚本是可执行的(例如chmod +x )。 (when choosing a scriptname it is advisable to check if any other program already uses the name with which scriptname or type scriptname) With the script location in your path, and it being executable, you can then simply run it from anywhere通过输入scriptname
  • Shell 脚本是“shell 脚本”,而不是“.sh 脚本”,不需要文件扩展名。尤其是 Bash 脚本,不应使用 .sh 扩展名,因为此扩展名意味着脚本可以使用 sh scriptname.sh 运行,而任何具有 bash 扩展名的脚本都不能保证以这种方式运行。
  • 在任何地方输入./script永远运行除当前目录(又名./)以外的任何地方的脚本。即使你的PATH 中某处有一个名为script 的东西,调用./script 也会告诉shell“不要查看$PATH,我想运行这里的那个”,如果有的话,后果很明显其实不是这样的脚本……

标签: linux bash shell unix terminal


【解决方案1】:

一种选择是简单地输入脚本的路径:

~/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。

作为tripleeenoted,一旦命令安装在PATH 上的目录中,您就不再键入./script,而只需键入script。这就像您键入 ls 而不是 /bin/ls 等。一旦程序安装在您的 PATH 上的目录中,它(出于许多目的)与系统提供的命令没有区别。

我的$HOME/bin 目录中有大约 500 个脚本和程序。

请注意,这不需要任何特殊权限。如果您对您的机器具有管理员访问权限并且您认为其他用户可能会发现您的命令很有用,那么您可以将脚本/程序安装在您的PATH 上系统提供的目录之一中。但是,通常最好不要将程序添加到以下任何一项:

  • /bin
  • /usr/bin
  • /sbin
  • /usr/sbin

经常/通常有/usr/local/bin,这是系统不提供的广泛使用的命令的合适位置。


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

【讨论】:

  • 虽然语法显然是 script 而不是 ./script
  • @Jonathan Leffler 有一个很好的解释。事实上,我认为最好的方法是将脚本 slowloris 添加到您的 $PATH 环境变量中。这样,您可以在没有./slowloris 的任何地方运行slowloris(因为./ 表示“从该目录运行”)。我想给你举一个很好的例子! askubuntu.com/questions/60218/…
【解决方案2】:

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

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

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

【讨论】:

  • 我收到一个错误“ln: /usr/local/bin: hard link not allowed for directory”
  • @NIKHILCM — 如果您收到有关硬链接的错误,这意味着您省略了 -s 选项。
  • 一旦我们创建了软链接,我们不需要输入./scriptscript就足够了
猜你喜欢
  • 1970-01-01
  • 2020-11-27
  • 2021-07-31
  • 2013-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
相关资源
最近更新 更多