後で何かをする必要がある bash スクリプトを作成しました。これは次のように呼ばれます。
later mv *.log /somewhere/else
しかし、このよう*.log
に呼び出すと、呼び出し時に展開され、スクリプトが呼び出されたかのように記述されます
later mv 1.log 2.log 3.log /somewhere/else
スクリプトでワイルドカードを後で展開しようとしています。こんな風に呼んでみた
later mv '*.log' /somewhere/else
と も使用\*
できますが、これらはどちらもワイルドカードがまったく展開されない結果になります。
コマンドラインでワイルドカードを展開するにはどうすればよいですか? また、スクリプトが呼び出されたときに拡張を防ぐ方法はありますか。つまり、入力された元のパラメーターを取得する方法はありますか?
これは、後で呼び出しを準備するスクリプトの一部です。
tmpfile=$(mktemp)
### Get a quoted commandline
line=
while (( "$#" > 0 )); do
line="$line\"$1\" "
shift
done
### Prepare a script to be run
echo '#!/bin/bash' > "$tmpfile"
echo "cd $(pwd)" >> "$tmpfile"
echo "trap 'rm \"$tmpfile\"' EXIT" >> "$tmpfile"
echo "$line" >> "$tmpfile"
chmod 777 "$tmpfile"
一部のファイルとフォルダーの名前にスペースが含まれているため、コマンドラインを引用する必要があることに注意してください。引用ビットを削除すると、ワイルドカードのないビットでも機能しなくなります。