我有一个别名,可以将一些参数传递给我经常使用的工具。有时我自己运行,有时在 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 中可以找到一个非常优雅的解决方案:
可以将所有别名传递给
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 之外运行)。例子:
简单的方法
将别名添加到 root
.bashrc
并sudo -i
在您 sudo 到 root 时使用。我希望我可以将两个答案标记为“正确”。结合Insyte的正确方法,嗯,有见地的帖子,与Bill Weiss的 awk(或 cut)解决方案,我想出了这个:
现在我将把它放入我的 .bashrc 或其他东西中的 shell 函数中,然后创建我希望以 root 身份运行的所有别名的“s”版本。
更新:对Dennis Williamson的简单函数稍作修改,使其更易于使用:
这意味着我只需将“s”放在整个命令的前面。代替:
我只是在前面添加了 s。
我已经完成了。当然,计算机做了更多的工作,但这就是计算机的用途。:-)
谢谢!
只需有两个别名并使用一个变量
我看不到使用的原因,
awk
或者cut
除非它只定义一次核心别名以便更容易修改。如果是这种情况,那么这有效:这是一个简单的函数来制作别名对,例如上面的那个:
要使用:
现在你有
pd
andspd
加上ct
andsct
。来自http://www.shellperson.net/using-sudo-with-an-alias/
简单地破解一个包含您的选项的脚本,然后将其放在作为常规帐户和根目录路径的文件夹之一中的某个位置不是更容易吗?它真的不需要太多的脚本。
这很粗糙,但在这里有效:
为您选择的别名和命令添加“sudo”前缀
~/.bashrc
,如下所示:正如多次发布的那样,在“.bashrc”中执行:
别名 sudo='sudo'
'man bash' 和 'help alias' 解释了原因:
alias: alias [-p] [name[=value] ... ] 定义或显示别名。
你想要这样的东西: