运行我的 shell 脚本而不是 Ubuntu 的内置文件

运行我的 shell 脚本而不是 Ubuntu 的内置文件

我的 shell 脚本已准备好运行。

但我的问题是当我需要用户运行我的 shell 脚本而不是 Ubuntu 的内置文件时

例如,我希望用户运行我的 passwd shell 脚本,而不是 /usr/bin/passwd 中的 Ubuntu passwd

我在 .bashrc 上写了别名,如下所示

alias passwd='./passwd'

我的问题是如何让用户运行我的密码而不是 Ubuntu 的密码?如何禁用真正的密码文件?

离题的问题,我该如何覆盖 sudo?
因为我的 shell 脚本包含 sudo,它会在第一次运行时打印出所需的密码。

答案1

您必须提供别名的名称,例如。对于某些命令(例如或) alias passwd='/home/Unknown/bin/passwd',这通常是默认完成的。lsgrepalias ls='ls --color=auto'这里有一些背景信息

要运行原始命令而不是别名,您可以使用command passwd stuff-to-do

话虽如此,替换与安全相关的二进制文件是一个愚蠢的想法。

编辑: .bashrc默认情况下,非交互式 shell 不会读取该文件,也就是说,在运行脚本时,脚本使用的 shell 不会读取该.bashrc文件。您可以使用一个函数来.bashrc执行此操作export,例如:

passwd(){
    /home/Unknown/bin/passwd
}
export -f passwd

我没有用 测试过passwd,但它应该可以工作。

部分细节来自这个问题的答案。

答案2

正如前面的答案所说,最佳做法是不要使用与已经存在的系统文件/命令相同的名称来命名脚本。

如果您确实必须这样调用它,那么至少应该添加 .sh 来稍微多样化一下,例如调用您的脚本“passwd.sh”(一般来说,这也是 shell 脚本的最佳实践),这样可以最大限度地减少混淆的机会。

至于您的问题,我建议在您的主目录下创建一个 bin 目录,或者(如果您有权限)将其放在 /usr/local/bin 中,然后修改用户 PATH 变量,以便找到/访问所选位置中的脚本,例如:

$ cd; mkdir bin
$ export PATH="$HOME/bin:/usr/local/bin:$PATH"

请注意,PATH 变量可能已经包含这些位置,最好通过以下方式事先检查:

$ echo $PATH

相关内容