这里已经存在一些关于将命令作为另一个用户运行的问题.但是,问题和答案集中在单个命令而不是一组长命令上.
例如,请考虑以下脚本:
#!/bin/bash
set -e
root_command -p param1 # run as root
# these commands must be run as another user
command1 -p 'parameter with "quotes" inline'
command2 -p 'parameter with "quotes" inline'
command3 -p 'parameter with "quotes" inline'
Run Code Online (Sandbox Code Playgroud)
这里有几点需要注意:
最后三个命令必须作为另一个用户使用su或运行sudo.在示例中有三个命令,但假设还有更多...
命令本身使用单引号和双引号.
上面的第二点阻止使用以下语法:
su somebody -c "command"
Run Code Online (Sandbox Code Playgroud)
...因为命令本身包含引号.
什么是"分组"命令并在另一个用户帐户下运行它们的正确方法?
Bar*_*mar 147
试试这个:
su somebody <<'EOF'
command1 -p 'parameter with "quotes" inline'
command2 -p 'parameter with "quotes" inline'
command3 -p 'parameter with "quotes" inline'
EOF
Run Code Online (Sandbox Code Playgroud)
<<介绍一个here-doc.下一个标记是分隔符,直到以分隔符开头的行的所有内容都作为标准输入提供给命令.将分隔符放在单引号中可防止here-doc中的变量替换.
我对bash-foo不是那么好,所以有一种更优雅的方式,但我过去通过使用多个脚本和一个"驱动程序"来解决这个问题
例如
司机
#!/bin/bash
set -e
su root script1
su somebody script2
Run Code Online (Sandbox Code Playgroud)
SCRIPT1
#!/bin/bash
set -e
root_command -p param1 # run as root
Run Code Online (Sandbox Code Playgroud)
SCRIPT2
#!/bin/bash
set -e
# these commands must be run as another user
command1 -p 'parameter with "quotes" inline'
command2 -p 'parameter with "quotes" inline'
command3 -p 'parameter with "quotes" inline'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
91659 次 |
| 最近记录: |