我按照https://stackoverflow.com/questions/2135644/how-can-i-define-a-bash-alias-as-a-sequence-of-multiple-commands中的说明创建自己的 bash 脚本。如下:
sudo -u otheruser -i
alias cd1="cd /dir/one/"
alias cd2="cd /dir/two/"
我希望这些别名可用于otheruser
. 我的目标是将它作为可执行文件运行,但为了测试我正在采购它(以避免https://stackoverflow.com/questions/2197461/how-to-set-an-alias-inside-a-bash-中的问题shell-script-so-that-is-it-visible-from-the-ou ) 之类的source ./myscript
。
即使这样做,sudo 仍然有效,但以下别名均不可用(对于otheruser
)。您是否认为别名被应用于调用此命令的用户,而不是新用户?或者是否有一些规则在对另一个用户执行 sudo 后忽略脚本中的命令?
我认为它不起作用的原因是这两个
alias
命令是在bash
会话sudo
结束后运行的。您可以进行测试 - 源脚本,当新会话开始时按下 Ctrl-d将其保留,然后在原始 shell 类型中:我可以用脚本实现你想要的,
expect
但我不是这方面的专家,所以欢迎批评:expect
在运行此脚本之前,请确保您确实已安装。您可能能够安装
expect
和tcl
(它需要)使用系统的包管理器。如果您需要手动安装,请参阅http://expect.sourceforge.net/上的 Expect 说明。Expect 的 README/INSTALL 文件指出了一些获取 Tcl 的位置,但这些似乎已经过时了。但是,您可以从 ActiveState 获取 Tcl 的副本。