我有一个别名,可以将一些参数传递给我经常使用的工具。有时我以自己的身份运行,有时在 sudo 下运行。不幸的是,当然,sudo 无法识别别名。
有没有人有关于如何传递别名的提示?
在这种情况下,我在调试时有很多 perl 选项:
alias pd='perl -Ilib -I/home/myuser/lib -d'
Run Code Online (Sandbox Code Playgroud)
有时,我必须以 root 身份调试我的工具,所以,而不是运行:
pd ./mytool --some params
Run Code Online (Sandbox Code Playgroud)
我需要在 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'"
Run Code Online (Sandbox Code Playgroud)
我希望有一个不错的、简洁的方法来确保我当前的 pd 别名被充分使用(以防我以后需要调整它),尽管我的一些尝试根本不简洁。我最后的手段是将它放入一个 shell 脚本中,并将它放在 sudo 能够找到的地方。但是别名有时非常方便,所以它是最后的手段。
Sli*_*red 52
在 Archlinux-Wiki 中可以找到一个非常优雅的解决方案:
alias sudo='sudo '
# whitespace ---^
Run Code Online (Sandbox Code Playgroud)
可以将所有别名传递给sudo.
来源:http : //wiki.archlinux.org/index.php/Sudo#Passing_aliases
Ins*_*yte 12
我不太清楚你要做什么。我可以看到两种方式:
alias pd='sudo perl -Ilib -I/home/myuser/lib -d'
然后执行pd ./mytool将以 root 身份执行您的调试命令,但仍保留 sudo 的好处(审计跟踪,而不是在 root shell 之外操作)。
例子:
insyte$ 别名 sid='sudo id' 插入$ sid uid=0(root) gid=0(root) 组=0(root)
将别名添加到 root.bashrc并sudo -i在您 sudo 到 root 时使用。
root# echo 'alias fb="echo foo bar"' >> /root/.bashrc 根#退出 出口 insyte$ sudo -i 根# fb 富吧
小智 5
来自http://www.shellperson.net/using-sudo-with-an-alias/
alias sudo='sudo '
Run Code Online (Sandbox Code Playgroud)
我希望我能将两个答案标记为“正确”。将Insyte的、嗯、富有洞察力的帖子中的正确方法与Bill Weiss的 awk(或 cut)解决方案相结合,我想出了这个:
alias spd="sudo $(alias pd | cut -d\' -f2)"
Run Code Online (Sandbox Code Playgroud)
现在我只需将其放入 .bashrc 或其他内容中的 shell 函数中,然后创建我希望以 root 身份运行的所有别名的“s”版本。
更新:对Dennis Williamson的简单函数进行了轻微修改,使其更易于使用:
salias()
{
local a c
a=$(echo "$1" | cut -f1 -d=)
c=$(echo "$1" | cut -f2- -d=)
alias $a="$c"
alias s$a="sudo $c"
}
Run Code Online (Sandbox Code Playgroud)
这意味着我只需在整个命令前面加上“s”即可。代替:
alias pd='perl -Ilib -I/home/myuser/lib -d'
Run Code Online (Sandbox Code Playgroud)
我只是在前面加了s。
salias pd='perl -Ilib -I/home/myuser/lib -d'
Run Code Online (Sandbox Code Playgroud)
我已经完成了。当然,计算机会做更多的工作,但这就是计算机的用途。:-)
谢谢!
| 归档时间: |
|
| 查看次数: |
19802 次 |
| 最近记录: |