![运行我的 shell 脚本而不是 Ubuntu 的内置文件](https://linux22.com/image/840989/%E8%BF%90%E8%A1%8C%E6%88%91%E7%9A%84%20shell%20%E8%84%9A%E6%9C%AC%E8%80%8C%E4%B8%8D%E6%98%AF%20Ubuntu%20%E7%9A%84%E5%86%85%E7%BD%AE%E6%96%87%E4%BB%B6.png)
我的 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'
,这通常是默认完成的。ls
grep
alias 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