![](/img/trans.png)
[英]How do I execute a "runuser" command, with arguments, in a bash script?
[英]How do I execute the arguments to a bash function as root using the su command?
我正在編寫一個腳本,其中我有一個 function 以 root 身份運行命令。 這樣它就可以根據用戶安裝的內容使用 sudo、doas 或 su。 function 看起來像這樣:
as_root() {
# $SU_CMD contains either sudo, doas --, or nothing
if [[ -n $SU_CMD ]]; then
$SU_CMD $@
else
su root -- $@
fi
}
如果 sudo 和 doas 都不可用,這將不起作用。 su root -- <command>
不是以 root 身份執行命令,而是寫入/usr/bin/<command>: /usr/bin/<command>: cannot execute binary file
to the terminal。 我還嘗試su -c "$@"
以及其他組合,但沒有骰子。
我將如何 go 關於執行 arguments 到 bash ZC1C425268E683854F1AB5074Csu17 ZC1C425268E683854F1AB5074Csu17?
您可能要運行三個命令。 請注意,在所有三種情況下都建議使用--
。
sudo -- "$@"
doas -- "$@"
su root -- "$@"
由於 function 的名稱意味着您始終需要su root
(而不是su foo
或其他用戶),因此要求root
包含在SU_CMD
中是沒有意義的。 因此,您可以簡單地編寫
as_root () {
case $SU_CMD in
sudo) sudo -- "$@" ;;
doas) doas -- "$@" ;;
su) su root -- -c "$*" ;;
*) printf 'Invalid choice: %s\n' "$SU_CMD" >&2 ;;
esac
}
(這可以重構,但考慮到 function 的簡單性,這似乎不值得付出努力。)
使用單個破折號而不是兩個或更好的 -l 以避免混淆:
as_root() {
if [[ -n $SU_CMD ]]; then
$SU_CMD "$@";
else
su root -l -c "$@";
fi
}
morbeo@pc:~$ as_root whoami
Password:
root
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.