abc.sh
ファイルと入力ソース()がありますinput.xyz
。
私はいつもabc.sh
入力ソース(例:I input sh abc.sh input.xyz
)を使ってファイルを実行しますが、ディレクトリ数が増えるにつれて入力ファイル名を入力するのはあまりにも怠けます。
コマンド()を入力するのではなく、abc.shファイルにプロセスを挿入して実行する方法はsh abc.sh input.xyz
?
現在のスクリプトはこれです
INPUT=$1
n="1"
numb=$(sed -n "$n"p $1)
#echo $numb
dummy="NULL"
コメントありがとうございます。私の間違いでした。スクリプトの実行時に入力します。
sh abc.sh 000.xyz
実行するたびに000.xyz
数字が違うので、.xyz
ただ固定されますね。
ベストアンサー1
bashを使用すると、ディレクトリ(001.xyz、002.xyzなど)で可能なすべての入力ファイルを繰り返すことができます。実行中の項目を構成するために、別のBASHスクリプトに配置する方が簡単です(例:batch_run.sh)。
たとえば、ループを使用してfor
現在のディレクトリの各xyzファイルを繰り返し、abc.sh
そのファイルに対してスクリプトを実行できます。
for input_file in *.xyz
do
sh abc.sh $input_file
done
複数のディレクトリがある可能性があると述べました。また、ワイルドカード文字(*)を拡張してディレクトリ(現在の場所に基づいて)を検討することもできます。
for input_file in */*.xyz
do
sh abc.sh $input_file
done
スクリプトを入力ファイルと同じディレクトリで実行する必要がある場合は、cd
ループ内でさまざまな操作を実行することもできます。
# remember the original directory before the for loop
original_directory = $(pwd)
# loop through all valid directories containing xyz files
for input_file in */*.xyz
do
# enter the directory of containing the xyz file
cd $(dirname $input_file)
# run the script on the xyz file
sh abc.sh $(basename $input_file)
# return to the original directory
cd ${original_directory}
done
やりたいことや仕様によっては少し複雑になるかもしれませんが、for
BASHループを使ってコマンドを自動的に繰り返す方法についてのアイデアを得ることを願っています。