Shell
如何通過 sudo 傳遞別名
我有一個別名,可以將一些參數傳遞給我經常使用的工具。有時我自己執行,有時在 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
.bashrc
並sudo -i
在您 sudo 到 root 時使用。root# echo 'alias fb="echo foo bar"' >> /root/.bashrc 根#退出 出口 insyte$ sudo -i 根#fb 富吧