【发布时间】:2013-03-03 13:03:12
【问题描述】:
我正在调试一个 bash 脚本,并将我的问题归结为这个非常简单的脚本。它在 CentOS 5.7 中运行:
# tmp.sh
function do_as_someuser {
sudo -u someuser -i "$1"
}
do_as_someuser "ls -l" # line 1
#do_as_someuser "A=1 ls -l" # line 2
当我执行这个脚本只取消注释第 1 行时,它显示 someuser 的主目录列表,正如预期的那样:
[root@centos57 test]# ./tmp.sh
total 4
drwxr-xr-x 4 someuser someuser 4096 Mar 14 23:36 some_dir
[root@centos57 test]#
但是当我只取消注释第 2 行时,它会将我记录为 someuser 并且不会返回到我的用户提示符,这绝对不是我所期望的。到底为什么要定义一个变量?
[root@centos57 test]# ./tmp.sh
[someuser@centos57 ~]$
A=1 ls -l 在我直接在命令行中编写时运行得非常好。如果这是一个有效的命令,我当然应该能够将它作为参数传递给sudo 来执行,不是吗?
我的问题:
- 为什么会这样?
- 如何修改
do_as_someuser,使其执行具有变量赋值的命令?
【问题讨论】: