Shell 正确地引用args来调用su-c
Shell 正确地引用args来调用su-c,shell,su,Shell,Su,su-c接受单个字符串参数,该参数被传递到$SHELL-c。这使得手动运行更复杂的命令成为引用的噩梦。我想要的是:一个将“$@”转换为一个字符串的函数,该字符串由目标shell适当地解析。为了简单起见,让我们假设目标shell与当前shell相同,或者是一个简单的(b)shell 我知道sudo将以正确的方式完成此任务。但我不想依赖sudo,除非我们必须这样做 # This does the right thing run_sudo() { sudo -u targetuser "$@"
su-c
接受单个字符串参数,该参数被传递到$SHELL-c
。这使得手动运行更复杂的命令成为引用的噩梦。我想要的是:一个将“$@”
转换为一个字符串的函数,该字符串由目标shell适当地解析。为了简单起见,让我们假设目标shell与当前shell相同,或者是一个简单的(b)shell
我知道sudo
将以正确的方式完成此任务。但我不想依赖sudo,除非我们必须这样做
# This does the right thing
run_sudo() {
sudo -u targetuser "$@"
}
run_sudo echo "double spaces"
如果您可以假设bash,那么它很简单:
/bin/bash -c "$(printf "%q " "$@")"
对于POSIX sh:
quote() {
for arg
do
var=$(printf "%sx" "$arg" | sed -e "s/'/'\\\\''/")
var=${var%x}
printf "'%s' " "$var"
done
}
/bin/sh -c "$(quote "$@")"
quote() {
for arg
do
var=$(printf "%sx" "$arg" | sed -e "s/'/'\\\\''/")
var=${var%x}
printf "'%s' " "$var"
done
}
/bin/sh -c "$(quote "$@")"