
通常、スクリプト内でファイル名を使用する場合は、スクリプト内でファイル名を明示的に指定します。たとえば、次のようになります。
#!/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
。