添加到路径只有sh文件而不是dir

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

最好的方法是在/usr/local/bin目录中添加一个到该文件的符号链接:

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

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

/usr/bin创建链接有效,但除非您希望脚本可供所有用户使用,否则我更愿意在~/bin创建具有相同结果的链接,但不会触及全局系统。 此外,OP没有提到存储脚本的位置。 在脚本存储在本地时全局创建链接是不好的做法,所以总的来说我建议:

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

无论是否有语言扩展,脚本都可以很好地工作。 但是,有一些参数可以使用没有语言扩展的脚本:

  • 为清楚起见,可能最好将脚本的链接命名类似于脚本本身 。 在调用脚本时,保持语言扩展将不太方便。
  • 虽然在用户编写脚本的情况下有点过头,但根据lintian惯例 ,默认搜索路径中的脚本(或脚本链接)不应具有语言扩展名。 –

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

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

只需将以上行添加到.bashrc文件即可。 您现在可以在bash shell / scripts中的任何位置使用server-stop

请参阅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. 

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

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

优点:

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

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

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

缺点:

  • 更改server-stop.sh所在的路径后,您将不得不更改别名(我认为不会经常需要)

  • 这只适用于bash shell,你必须看到其他shell用于别名。