2015-05-12 34 views
2

我想爲使用通配符作爲參數的bash腳本創建alias。當我嘗試使用alias cmd時,它不提供所需的輸出。使用參數中的通配符選項創建bash腳本的別名

別名CMD的使用將是log_list /tmp/abc*

#usage log_list /tmp/abc* 
    alias log_list=`sh scriptname $1` 

    #here is the script code 
    for file_name in $* ; do 
     if [ ! -d $file_name ] && [ -f $file_name ] ; then 

      #do some processing ... 
      echo $file_name 
     fi 
    done 
+0

單引號不反推別名定義。你正在那裏運行命令。看看別名log_list的輸出。 –

+1

順便說一句,'[-f「$ file_name」]'對於任何其中'[-d「$ file_name」]'返回true的東西都不應該返回true,所以我不確定爲什麼你有前檢查,而不是傾斜只有後者。 –

回答

4

別名不通過$1等的處理參數;他們只是將文本直接放在命令行的其餘部分。

要麼使用:

alias log_list='sh scriptname'  # note that these are single-quotes, not backticks 

...或功能:

log_list() { sh scriptname "[email protected]"; } 

...但如果你的腳本名爲log_list,標示可以執行的,且位於PATH的地方,那別名或功能應該是完全不必要的。


現在,這就是說,你提出的log_list的實現也有一堆bug。清理後的版本可能看起來更像...

#!/bin/sh 
for file_name in "[email protected]" ; do 
    if [ ! -d "$file_name" ] && [ -f "$file_name" ] ; then 
     #do some processing ... 
     printf '%s\n' "$file_name" 
    fi 
done