这是我的脚本。我想用另一个用户登录并执行以下操作ls -lih:
#!/bin/bash
su - testuser <<- _EOF_
123456 #password
_EOF_
ls -lih
Run Code Online (Sandbox Code Playgroud)
这是我运行脚本时的输出:
./script.sh
-bash: line 1: 123456: command not found
total 127M
262210 drwxr-xr-x. 9 mazimi mazimi 156K Feb 14 19:05 Desktop
262211 drwxr-xr-x. 2 mazimi mazimi 36K Feb 14 18:26 Downloads
278106 -rw-r--r-- 1 mazimi mazimi 64K Feb 14 22:30 ems.cfg
... # list of files
Run Code Online (Sandbox Code Playgroud)
它ls -lih在我的主目录中不是testuser吗?我该如何解决?
您的代码有几个问题。
su从 读取密码/dev/tty,而不是从stdin,因此您不能像这样重定向密码。事实上,su默认情况下是作为目标用户启动一个shell,所以如果你运行它root:
su - testuser <<- _EOF_
123456 #password
_EOF_
Run Code Online (Sandbox Code Playgroud)
该su会成功(根并不需要密码才能做到这一点),但123456将得到作为输入用户的外壳,这就是为什么当你运行你的脚本,你看到过:
-bash: line 1: 123456: command not found
Run Code Online (Sandbox Code Playgroud)
如果您想以非 root 用户身份执行此操作,您可能应该遵循 bahamt 的建议并使用sudo,它可以配置为以不同用户身份提供对特定命令的无密码访问。
即使su有效,它也会产生一个新的过程。该su命令已退出(并返回到原来的帐户)之前,ls命令执行。所以你真正想要的是:
su - testuser <<EOF
ls -lih
EOF
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
3229 次 |
| 最近记录: |