![](/img/trans.png)
[英]Git completion and PS1 not working: “__git_ps1: command not found” on “sudo -s” or “sudo su” on Ubuntu 12.04
[英]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.