2017-03-03 230 views
0

我正在尋找一種方法來讓bash命令通過默認參數代替0參數。例如,當將$ ls傳遞給命令行時,用戶實際上會將$ ls --color傳遞到命令行。爲bash命令設置默認參數

+0

您可以編寫一個調用的函數'ls',運行'/ bin/ls'。如果給它的參數傳遞它們,否則它會使用默認參數運行它。 – Barmar

+0

有些命令在環境變量中查找默認設置。查看你感興趣的命令的文檔。 – Barmar

+0

一個例子是'less',它使用'LESS'環境變量來獲取默認選項。 – Barmar

回答

1

您可以使用函數或別名。

如果你想與您更多的選擇,前綴的所有ls調用,您可以定義一個別名是這樣的:

alias ls="ls --color" 

這就像使用隱每次使用ls時間的選項。被調用時,別名被其分配的值替換。必須在命令的開頭使用別名,並且擴展的別名將成爲將被解釋的最終語句的一部分。換句話說,別名是自動文本替換的一種形式,並且在他們可以做的事情上相當有限。

正如Barmar建議,你也可以使用一個功能,它允許您使用默認參數(或其中的一些)只有在完全沒有參數如下:

ls() 
{ 
    if 
    (($#)) # True if at least one argument present 
    then 
    command ls "[email protected]" 
    else 
    command ls --color 
    fi 
} 

一件事別名允許函數不能在與調用上下文相同的上下文中執行(它們是文本替換的形式,而不是函數調用),因此它們可以與位置參數進行交互。舉個例子,你可以有這樣一個別名:

alias shift_and_echo="shift ; echo" 

這實際上轉移了位置參數作爲活躍在使用別名,違背了一個函數調用,它只會改變其自身的參數,並留下電話上下文位置參數不受影響。 echo會有別名調用之後的任何參數(它可能什麼也沒有)。

對我來說,這是在爲某些特定目的腳本中使用別名的主要原因,否則功能一般較好,能夠接收參數,包括局部變量...

+0

ls函數重複調用本身並崩潰。 – warrens

+0

討厭而明顯的錯誤!更新版本應避免遞歸調用。 – Fred