2012-03-30 75 views
7

作爲一個簡單的例子,在用戶foo的〜/ .bashrc中有一個別名;我向用戶〜/ .bashrc添加了別名,但「sudo -u user -i'alias_name'」仍然報告「找不到命令」?

alias ll='ls -l' 

使用sudo我可以看到別名被設置;

[email protected]:~$ sudo -u foo -i alias ll 
alias ll=`ls -l' 

但是,我實際上不能使用別名;

[email protected]:~$ sudo -u foo -i ll 
-bash: ll: command not found 

作爲bash函數的命令工作正常。有沒有辦法讓別名也起作用?

回答

3

有一個很好的例子,如何做到這一點in the Archlinux wiki。將下列內容添加到您的.bashrc中

alias sudo="sudo " 

不要問我爲什麼會有效。我搜索了我的手冊,但沒有運氣,但我從來沒有失敗過。

> sudo ll 
total 60 
drwxr-xr-x 2 brice users 4096 Feb 4 16:17 classes 
drwxr-xr-x 3 brice users 4096 Mar 6 21:48 Desktop 
drwx------ 6 brice users 4096 Mar 28 21:32 Downloads 
drwx------ 25 brice users 4096 Mar 29 21:20 Dropbox 
drwxr-xr-x 2 brice users 4096 Mar 11 20:27 scripts 
drwxr-xr-x 2 brice users 4096 Mar 19 21:59 tmp 
+0

這是令人高興的古怪! – Sorpigal 2012-03-30 17:00:51

10
+0

+1提供了一個鏈接,解釋*爲什麼這個工程。 – Sorpigal 2012-03-30 17:01:39

+0

這適用於本地登錄的'foo',但不適用於嘗試'su -u foo'的用戶'bar'。 – CAB 2012-03-30 17:03:53

+1

@CAB:連接Gor的文章解釋了原因。如果緊跟在第一個別名命令之後的參數也是別名,則尾隨空格技巧只會有所幫助。如果你說'sudo -i ll',Bash就會發現'-i'不是別名,所以它停止擴展別名並執行內置的命令。你可能不得不把你的第二個別名變成腳本或shell函數來獲得你想要的行爲。 – 2012-04-02 17:52:03

1

確保您添加

alias sudo='sudo ' 

然後繼續前進,添加自定義的名稱...對於如。如果常規命令是

sudo rm ~/qwerty/removethis.txt 

別名上面的命令看起來像

alias your_custom_alias='sudo rm ~/qwerty/removethis.txt' 
相關問題