我正在调试一个 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
someuser
当我执行此脚本仅取消注释第 1 行时,它会按预期显示 的主目录的列表:
[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
以便它执行具有变量分配的命令?