2014-12-19 28 views
0

在被添加到我的$ PATH的目錄中,我有以下文件:終端:如何將參數傳遞給別名?

filename="$1" day="$2" month="$3" 
ruby -r "./SomeClass.rb" -e 'SomeClass.run($filename, $day, $month)' 

假設此文件被稱爲SomeClass的。當我在終端輸入someclass時,我的系統將它識別爲有效的命令,並正確運行相應的Ruby文件。但是參數沒有被傳入。我如何將參數傳遞給別名?

回答

2

如何將參數傳遞給別名?

不要使用alias,最好爲此聲明一個function。您可以輕鬆傳遞參數並在bash函數中執行其他操作:

someclass() { 
    # make sure enough arguments are passed in 
    # echo "$1 - $2 - $3"; 
    filename="$1"; day="$2"; month="$3"; 
    ruby -r "./SomeClass.rb" -e "SomeClass.run($filename, $day, $month)"; 
} 
+0

@anishsane:感謝您對重要報價的更改,我從問題中刪除了錯誤的複製/粘貼。 – anubhava 2014-12-19 10:25:50

+0

你是如何聲明一個函數的?這是一種腳本語言嗎?或者bash是否擁有內置的這種功能? – 2014-12-19 10:28:16

+0

這完全支持BASH本身。你可以把這段代碼放在'〜/ .bashrc'中,然後函數就可以在任何地方使用。 – anubhava 2014-12-19 10:32:09

1

您正在使用單引號。將它們更改爲雙倍:

ruby -r "./SomeClass.rb" -e "SomeClass.run($filename, $day, $month)" 

在單引號內不進行擴展。從bash manual

3.1.2.2單引號

圍字符單引號(「'」)保留了引號內的每個字符的文本值。單引號之間可能不會出現單引號,即使前面加了反斜線。

3.1.2.3雙引號

圍護字符用雙引號(「「」)保留了引號中的所有字符的字面意義,‘$’,‘`’,‘\’外,當啓用歷史擴展時,'!'。字符'$'和'`'在雙引號內保留其特殊含義(請參閱Shell擴展)。只有在跟隨以下字符之一時,反斜線纔會保留其特殊含義: '$','`',''','\'或換行符。在雙引號內,刪除後跟其中一個字符的反斜槓。沒有特殊含義的字符之前的反斜槓未作修改。雙引號可以用雙引號括起來,前面加一個反斜槓。如果啓用,將會執行歷史擴展,除非使用雙引號出現的'!'使用反斜槓進行轉義。 '!'前的反斜槓不會被刪除。

我正在使用的引用上的一個有用的頁面是grymoire

關於問題的標題,請檢查this question (Alias with variable in bash)及其答案:您不能也不得不使用函數。

相關問題