从脚本进行 sudo 交互后为新用户添加别名

从脚本进行 sudo 交互后为新用户添加别名

我按照中的说明进行操作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 到另一个用户后会忽略脚本中的命令?

答案1

我认为它不起作用的原因是这两个alias命令是bash在会话启动sudo完成后运行的。您可以进行测试 - 获取脚本源,当新会话开始时按 Ctrl-d保留它,然后在原始 shell 中输入:

$ type cd1
cd1 is aliased to `cd /dir/one/'
$ type cd2
cd2 is aliased to `cd /dir/two/'

我可以实现你想要的expect脚本,但我不是这方面的专家,所以欢迎批评:

#!/usr/bin/expect -f

spawn sudo -u otheruser -i
send "alias cd1='cd /dir/one/'"
send "\n"
send "alias cd2='cd /dir/two/'"
send "\n"

interact

expect在运行此脚本之前确保您确实已经安装。

您也许能够使用系统的包管理器进行安装(这是必需的)expecttcl如果您需要手动安装,请参阅 Expect 的说明:http://expect.sourceforge.net/。 Expect 的 README/INSTALL 文件指出了一些获取 Tcl 的位置,但这些似乎已经过时了。不过,您可以从 ActiveState 获取 Tcl 的副本。

相关内容