为什么在创建别名时要提供两个不同的路径?

为什么在创建别名时要提供两个不同的路径?

当我发出时,alias --help我得到这个输出:

alias: usage: alias [-p] [name[=value] ... ]

据我了解,您需要做的就是输入别名并提供脚本文件的实际路径,如下所示:

alias scr = /usr/local/tools/some_script.sh

但是,我注意到创建别名时有时会提供 2 个路径 - 例如,我alias scr在公司计算机上发出命令并得到以下输出:

alias scr = 'sudo /bin/sh /usr/local/tools/some_script.sh'

/bin/sh在这种情况下引入额外路径的目的是什么?

/bin/sh 仅包含 bash 目录的符号链接:

ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Aug  6  2017 /bin/sh -> bash

答案1

通过定义的别名

alias scr='sudo /bin/sh /usr/local/tools/some_script.sh'

(在 周围有空格=是一个错误),调用通过使用脚本的路径名作为参数显式调用shell 解释器sudo来运行脚本。/usr/local/tools/some_script.sh/bin/sh

是下可执行文件/bin/sh的路径名(在您的情况下,它是指向 的符号链接,但这并不重要)。它用于运行shell 脚本。在这种情况下, at 的脚本可能是为 编写的脚本,因此别名确保它作为解释器被调用。sh/binbashsh/usr/local/tools/some_script.shsh/bin/sh

如果脚本是可执行的并且有一个#!指向有效脚本解释器的 -line 作为其第一行,则/bin/sh可以删除该位。

所以,简而言之,别名允许您运行命令

/bin/sh /usr/local/tools/some_script.sh

只需输入 root 身份即可scr

相关内容