如何将别名传递给sudo?


38

我试图把我的别名~/.bash_profile~/.bashrc/etc/profile,和/etc/bashrc

我仍然无法执行以下操作:

alias zf2="php public/index.php"

然后执行:

sudo zf2 orm:info

问题似乎是我无法使用visudo将别名指定为命令,这会导致语法错误。

因此,我无法致电:

sudo zf2 orm:info

但是,我能够在/ usr / share / scripts / zf2中创建一个脚本,其中包含:

#!/bin/bash

alias zf2="php public/index.php"
zf2 $1

并将此脚本添加为visudo中的命令。当此脚本位于最终用户的PATH中时,我可以执行

zf2 orm:info

我有不同的别名zf2,需要向最终用户公开。我希望保留别名而不是脚本集合。


1
不幸的是,我想在visudo中使用别名,但无法执行。
MichaelNiño17年

2
这是不可能的。别名由外壳(在您的情况下为bash)处理,并在发送给应用程序之前进行扩展。 sudo本身对别名一无所知。
史蒂文·

2
由于@Steven在技术上是正确的,你应该清楚你是否只想扩大别名之前sudo传递的路线,或者是否要在提升环境扩展的别名。Pedantry不仅是引起眼花eye乱的方法。(哇,但是最后一句话看起来
完全不洁


1
试试看sudo -E
Denis de Bernardy

Answers:


66

具有讽刺意味的是,解决方案是sudo从别名调用。

alias sd="sudo "

注意:虽然不建议使用,但您可以将别名命名为sudoalias sudo="sudo "

Bash参考手册(别名)

如果别名值的最后一个字符为空,则还将检查别名后面的下一个命令字以进行别名扩展。


7
我也许可以看到为什么有人会或不想让它作为任何系统的默认设置的原因。所要求的便利性和期望,而不是在特权提升时更加谨慎。
Pysis

5
alias sd="sudo "可能吗?
Nate

在查看了我的别名之后,我发现我不在alias sudo="sudo "最终用户环境中。这就是答案
MichaelNiño17年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.