仅添加到路径 sh 文件而不是目录

仅添加到路径 sh 文件而不是目录

我有一个 bin 文件夹,里面有一堆 sh 文件。例如“server-run.sh”、“server-stop.sh”、“server-do-something.sh”。我想从任何地方运行文件“server-stop.sh”。我可以将此 bin 文件夹添加到路径,但“run”和“do-something”文件也将可用,我不想污染我的控制台。另外,我不想将此文件添加到 /bin 文件夹,因为它可能会更改。也许是链接。我能否以某种方式仅将“server-stop.sh”添加到路径?

答案1

最好的方法是在目录中添加此文件的符号链接/usr/local/bin

cd /usr/local/bin
ln -s server-stop.sh /path/to/your/folder/server-stop.sh

在这种情况下,您正在添加指向原始文件的链接,因此您可以随时更改原始文件,并且您的命令将始终有效。

答案2

在 中创建链接/usr/bin是可行的,但除非您希望所有用户都可以使用脚本,否则我更愿意在 中创建链接~/bin,结果相同,但不会影响全局系统。此外,OP 没有提到脚本的存储位置。在脚本存储在本地的情况下全局创建链接是一种不好的做法,因此我建议:

  • 创建本地目录~/bin
  • 从脚本中删除语言扩展(除非它们相互调用),使它们可执行(见下文)。
  • ~/bin从(ln -sf)创建到脚本的链接。
  • 注销并重新登录。

无论有没有语言扩展,该脚本都可以完美运行。但是,有一些理由支持使用没有语言扩展的脚本:

  • 为了清晰起见,最好这样命名脚本链接如同剧本本身. 保留语言扩展在调用脚本时会不太方便。
  • 虽然在用户编写脚本的情况下有点过度,但根据lintian 约定,默认搜索路径中的脚本(或脚本链接)不应该具有语言扩展。-

答案3

我将使用bash内置命令hash来记住脚本的位置server-stop.sh

hash -p /path/to/folder/server-stop.sh server-stop

只需将上述行添加到您的.bashrc文件中。您现在可以server-stopbashshell/脚本的任何地方使用它。

help hash

hash: hash [-lr] [-p pathname] [-dt] [name ...]
Remember or display program locations.

Determine and remember the full pathname of each command NAME.  If
no arguments are given, information about remembered commands is displayed.

Options:
  -d        forget the remembered location of each NAME
  -l        display in a format that may be reused as input
  -p pathname   use PATHNAME is the full pathname of NAME
  -r        forget all remembered locations
  -t        print the remembered location of each NAME, preceding
        each location with the corresponding NAME if multiple
        NAMEs are given
Arguments:
  NAME      Each NAME is searched for in $PATH and added to the list
        of remembered commands.

答案4

也许别名就是您要找的。打开~/.bash_aliases文件并将以下内容添加到文件末尾(该文件可能为空,具体取决于您之前是否添加了别名):

alias server-stop.sh='/path/to/your/server-stop.sh`

优点:

  • 这只会server-stop.sh按你的意愿添加

  • 这不会改变你的$PATH变量

  • 系统的其他用户不受影响

缺点:

  • 一旦更改了所在路径,就必须更改别名server-stop.sh(我认为不需要经常这样做)

  • 这只对 bash shell 有效,您必须查看其他 shell 使用什么别名。

相关内容