オートコンプリート機能を使用してファイル名をスクリプトに渡す

オートコンプリート機能を使用してファイル名をスクリプトに渡す

通常、スクリプトでファイル名を使用するときは、スクリプトのファイル名を明示的に説明します。

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

次のようにファイル名をスクリプトに渡すことができるかどうか疑問に思います。

./script_name.sh file_1 file_2 file_3

機能タブオートコンプリート。 (これはとても楽です!)

誰でもこれの経験がありますか?ありがとうございます。


readいくつかの入力データを要求する1つの方法ですが、複数の入力と長いテキストの場合は面倒です。

答え1

いいですね。スクリプトは1つの必須パラメータと2つのオプションのパラメータを使用します。 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

渡した3つの引数(すべて「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

.bash_profile通常、またはなどのシェルの構成ファイルでこれを行います.bashrc

関連情報