簡體   English   中英

用su模擬sudo的行為

[英]Emulating sudo's behaviour with su

我正在嘗試在su周圍寫一個包裝器使它更像sudo ,所以su_wrapper foo bar baz == su -c "foo bar baz"

但是,我不確定如何解決這個問題。 我想出了這個:

su_wrapper ()
{
  su -c "$@"
}

但是,在上面,只有一個參數可以存在; 這失敗了多個參數(因為su將它們視為自己的參數)。

還有另一個問題:由於參數是通過shell傳遞的,我認為我必須明確指定shell以避免其他問題。 也許我想做的事情可以用偽bash(!)表示為su -c 'bash -c "$@"'

那么,我怎么能讓它接受多個參數呢?

使用printf "%q"來轉義參數,以便它們可以用作函數的字符串輸入:

su_wrapper() {
    su -s /bin/bash -c "$(printf "%q " "$@")"
}

$*不同,即使參數包含特殊字符和空格,這也適用。

你需要$*而不是$@

su_wrapper() {
    local IFS=' '
    su -c "$*"
}

有關$*$@之間的區別,請參閱“ Bash參考手冊”中的特殊參數”部分

我添加了local IFS=' '以防IFS被設置為其他東西(在閱讀$*之后,應該清楚為什么要確保IFS設置為空格)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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