簡體   English   中英

如何使用 su 命令以 root 身份執行 arguments 到 bash function?

[英]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?

您可能要運行三個命令。 請注意,在所有三種情況下都建議使用--

  1. sudo -- "$@"
  2. doas -- "$@"
  3. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM