Shell

如何通過 sudo 傳遞別名

  • April 17, 2015

我有一個別名,可以將一些參數傳遞給我經常使用的工具。有時我自己執行,有時在 sudo 下執行。不幸的是,sudo 當然不能辨識別名。

有沒有人暗示如何通過別名?

在這種情況下,我在調試時有很多 perl 選項:

alias pd='perl -Ilib -I/home/myuser/lib -d'

有時,我必須以 root 身份調試我的工具,所以,而不是執行:

pd ./mytool --some params

我需要在 sudo 下執行它。我嘗試了很多方法:

sudo eval $(alias pd)\; pd ./mytool --some params
sudo $(alias pd)\; pd ./mytool --some params
sudo bash -c "$(alias pd)\; pd ./mytool --some params"
sudo bash -c "$(alias pd); pd ./mytool --some params"
sudo bash -c eval\ "$(alias pd)\; pd ./mytool --some params"
sudo bash -c eval\ "'$(alias pd)\; pd ./mytool --some params'"

我希望有一種簡潔的方式來確保我目前的 pd 別名被充分使用(以防我以後需要調整它),儘管我的一些嘗試根本不簡潔。我最後的手段是把它放到一個 shell 腳本中,然後把它放在 sudo 能夠找到的地方。但有時別名非常方便,所以這是不得已而為之。

在 Archlinux-Wiki 中可以找到一個非常優雅的解決方案:

alias sudo='sudo '
# whitespace ---^

可以將所有別名傳遞給sudo.

來源:http ://wiki.archlinux.org/index.php/Sudo#Passing_aliases

我不太清楚你想做什麼。我可以看到兩種方式:

正確的方式

alias pd='sudo perl -Ilib -I/home/myuser/lib -d'

然後執行pd ./mytool將以 root 身份執行您的調試命令,但仍保留 sudo 的好處(審計跟踪,而不是在 root shell 之外執行)。

例子:

insyte$ alias sid='sudo id'
insyte$ sid
uid=0(根) gid=0(根) 組=0(根)

簡單的方法

將別名添加到 root.bashrcsudo -i在您 sudo 到 root 時使用。

root# echo 'alias fb="echo foo bar"' >> /root/.bashrc
根#退出
出口
insyte$ sudo -i
根#fb
富吧

引用自:https://serverfault.com/questions/61321