我有一个 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-stop
在bash
shell/脚本的任何地方使用它。
看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 使用什么别名。