將檔案名稱傳遞給具有自動完成功能的腳本

將檔案名稱傳遞給具有自動完成功能的腳本

通常,當我在腳本中使用檔案名稱時,我會在腳本中明確提及檔案名,例如如下所示,

#!/bin/bash ... echo "<dynamic text>" >> process_log.log ...

我想知道是否可以將文件名傳遞給腳本,如下所示:

./script_name.sh file_1 file_2 file_3

具有選項卡自動完成功能。 (這樣就很方便了!)

有沒有人有這方面的經驗。謝謝。


read是詢問一些輸入資料的一種方法,但我覺得對於多個輸入和長文字來說很麻煩。

答案1

好的,腳本採用一個強制參數和兩個可選參數。如果您未指定至少一個參數,它將退出(並出現錯誤)。除此之外並沒有太多作用!

#!/bin/sh
if [ -z "$1" ]
then
    echo "Missing filename: 1"
    exit 1
else
    file1=$1
fi
file2="$2"
file3="$3"
printf "File 1: %s\n" "$file1"
printf "File 2: %s\n" "$file2"
printf "File 3: %s\n" "$file3"
cat "$file1"

將其另存為(例如)script_name.sh並將其設定為可執行檔:

chmod u+x script_name.sh

然後像這樣運行它:

./script_name.sh script_name.sh script_name.sh script_name.sh

它應該顯示您傳遞給它的三個參數(都是“script_name.sh”),然後是cat它本身。

當我嘗試這個時,我嘗試了製表符補全 - 它自動工作得很好(當我按下 時它顯示文件和目錄Tab)。我沒有做任何事情讓它做到這一點。但是,如果您只想讓腳本處理某些檔案complete -f -X '!*.png' script_name.sh- 當您按 時,只會顯示「.png」檔案Tab

編輯新增:

complete不是從腳本本身運行(script_name.sh在上面的範例中)。建立一個單獨的文件(completion_for_script_name.sh例如):

complete -f -X '!*.png' script_name.sh

用於source將完成載入到目前環境:

source ./completion_for_script_name.sh

通常,您可以在 shell 的設定檔中執行此操作,例如.bash_profile.bashrc

相關內容