2012-03-30 2 views
7

例として、ユーザーfooの〜/ .bashrcには別名があります。ユーザー〜/ .bashrcにエイリアスを追加しましたが、 "sudo -u user -i 'alias_name'"は "コマンドが見つかりません"と報告していますか?

alias ll='ls -l' 

私は別名が設定されていることがわかります。

[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

10

試してみてください。

alias sudo='sudo ' 

http://www.shellperson.net/using-sudo-with-an-alias/

+0

+1の理由を説明するリンクを提供しています。 – Sorpigal

+0

これはローカルでログインした 'foo'では動作しますが、 'su -u foo'を実行しようとしているユーザー 'bar'では機能しません。 – CAB

+1

@CAB:理由を説明する記事Gorがリンクされています。後続のスペーストリックは、最初のエイリアス化されたコマンドの直後の引数が別名である場合にのみ役立ちます。 'sudo -i ll'と言うと、' -i'はエイリアスではないので、エイリアスの展開を止め、ビルドされたコマンドを実行します。おそらく2番目のエイリアスをスクリプトやシェル関数に変えて、必要な動作をさせる必要があります。 –

1

その後、先に行くと、カスタム別名を追加...などのためにあなたが

alias sudo='sudo ' 

を追加してください。通常のコマンドが

sudo rm ~/qwerty/removethis.txt 

であれば、上記のコマンドの別名は楽しく奇抜だ

alias your_custom_alias='sudo rm ~/qwerty/removethis.txt' 
関連する問題