2011-10-10 22 views
7

私は、clearコマンドとlsコマンドを1つのコマンドにエイリアスする方法を探していました。 現在、私が定義したコマンドのx:Linuxエイリアスチェーンコマンド(再帰を避けることができますか?)

alias x="clear;ls" 

今再帰を避け、定義する任意のwalkaroundがあります:

alias ls='clear;ls' 
+0

システムで再帰的に何もすることはできませんが、 'alias ls = 'clear;/bin/ls''を試してみましたか? –

+2

私の 'ls'は長い間 'ls'を参照するエイリアスであり、Manny Dのように再帰的な問題はありませんでした。私はあなたの 'alias ls = 'clear; ls''を試してみましたが、うまくいきました。これはRHEL 5 Linux上で、Bashバージョン3.2.25を使用しています - どのようなシステムとどのシェルを使用していますか? –

+0

ああ私はtsshを使用していました。もしalias ls ''clear; ls''を定義し、lsを使うと' 'Alias Loop。" 'というエラーが出ます。しかし、それはBashの下で働いた。 – GoTTimw

答えて

20

コマンド名の前にバックスラッシュを付けると、エイリアスがすべて無効になります。

alias ls='clear;\ls' 

また、Arnaud氏によると、lsのフルパスを使用してください。

+0

私はこれが一番クリーンな解決策だと思います。ありがとう – GoTTimw

1

ちょうど行います

alias ls='clear;/usr/bin/ls' 

入力する場合:

$ ls 

まず、ユーザー定義の関数を検索し、それを起動し、そうでない場合は$ PATHコマンドで検索します。

lsコマンドの明示的なパスを指定することで、再帰は回避されます。

+3

lsが決して/ usr/binにないので面白いです。 – Hello71

13

これを行うための別の方法は、それはまだ$PATHlsを検索するように、これは、/usr/bin/ls異なる

alias ls='clear; command ls' 

だろうが、シェル関数やエイリアスを無視します。

+0

これはエイリアスだけでなく多くの状況に適用されます。関数とエイリアスをバイパスして組み込み関数と実行可能ファイルに直接移動したい場合は、 'command'組み込み関数を使用してください。 – Zenexer

関連する問題