2011-10-10 33 views
7

我一直在尋找各種方法將clear和ls混合到一個命令中。 目前我定義命令X:Linux別名鏈命令(可以避免遞歸嗎?)

alias x="clear;ls" 

現在有沒有外觀圖釋,以避免遞歸和定義:

alias ls='clear;ls' 
+0

我不能讓它在我的系統上執行任何遞歸操作,但是你嘗試過別名ls ='clear;/bin/ls''嗎? –

+2

我的'ls'長期以來就是'ls'的別名,就像Manny D一樣,它從來沒有遞歸問題。我試過你的別名ls ='clear; ls'',它也能正常工作。這是在RHEL 5 Linux上,Bash版本是3.2.25 - 你在使用什麼樣的系統和shell? –

+0

哦,我使用tcsh,如果我定義:alias ls''clear; ls''並使用ls它會拋出一個''Alias Loop。「'錯誤。但它在Bash下工作。 – GoTTimw

回答

20

如果你在命令名之前加了一個反斜槓,那將會禁用任何別名。

alias ls='clear;\ls' 

或者,像阿爾諾說,剛使用LS的完整路徑。

+0

我認爲這是最乾淨的解決方案,它工作得很好。謝謝 – GoTTimw

1

只要做到:

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

打字的時候:

$ ls 

首先它會搜索用戶定義的函數,它會啓動它,否則搜索$ PATH命令。

通過給出ls命令的顯式路徑,可以避免遞歸。

+3

這很有趣,因爲ls永遠不在/ usr/bin中。 – Hello71

13

這樣做的另一種方法是

alias ls='clear; command ls' 

這是/usr/bin/ls不同,因爲它仍然在$PATH搜索ls,但是會忽略shell函數或別名。

+0

這適用於許多情況,而不僅僅是別名。如果您想直接使用內置函數和可執行文件,繞過函數和別名,請使用內置的'command'。 – Zenexer