txtファイルから変数を読み取り、forループでその変数を使用してPythonファイルを実行するシェルスクリプトを実行しようとしています。
このコードは、var1、var2、var3....var 100など、少なくとも100個の変数を持つtxtファイルを読み取ります。
このコードは、ディレクトリ(Rep1、Rep2)を変更して、各ディレクトリRepOut_Rep1.outから別のファイルを読み込みます。
このコードはPythonコードを実行して別のディレクトリからエントリを取得します。
python /home/PhytonFiles/phytonFold.py -s /home/mySFiles/$var -o $RepOut_Rep1.out -n summaryFile.txt
次のコードを書きましたが、うまくいかないようです。
input="MyList.txt"
while IFS= read -r file;
do
# printf '%s\n' "$file"
# run the script for the following directories (Rep1, Rep2. ...)
for f in Rep1 Rep2
do
cd ${f}
# pull the output file
outFile=RepOut_${f}.out
# create a summary folder at the end of the run
summaryFile=summary_${f}_$file
# run the python file, get the inputs from /home/mySFiles/ with the variable $file
phyton /home/PhytonFiles/phytonFile.py -s /home/mySFiles/$file -o $outFile -n $summaryFile
done
done < "$input"
Pythonの実行行で使用されている変数が正しいかどうかはわかりません。私はどこに間違って行くことができますか?
ご協力ありがとうございます。
ビルカン
答え1
実際にあなたが望むことをするのを妨げるものがあります。
- さらに、9行目からRep1にcdしてからforループが続くと、まだRep1にあるため、Rep2にcdできません。
したがって、フォルダ構造
./
./Rep1
./Rep2
Pythonスクリプトを実行したら、親フォルダに戻ります。しかし、正直なところ、cdコマンドを使用する理由がわかりません。 forループにフルファイルパスを作成するだけです。
また、Pythonのスペルを誤って入力したため、Python行が実行されていない可能性があります。
次の変数ファイルを意味する場合:
VAR1 = a VAR2 = b VAR3 = c ...
その後、ファイルを読み込むよりもファイルをインポートしたいのですが、スクリプトに基づいて、ファイルは実際にはbash変数の変数ファイルではなくファイル名フォルダであると推測します。
file1.txt
file2.txt
file3.txt
...
この場合、ファイル名にスペースがあるかどうかはわからないため、常に$ fileを引用符で囲む必要があります。スペースがある場合、bashはPython行に次の内容を印刷します。
phyton /home/PhytonFiles/phytonFile.py -s /home/mySFiles/some file name.txt -o $outFile -n $summaryFile
これにより、Pythonが次のオプションを使用できると考えることができます。
-s /home/mySFiles/some
-o $outFile
-n $summaryFile
そしてこれらの主張は
file
name.txt
上記の変更を含むスクリプトのバージョンは次のとおりです。 :)
#!/bin/bash
input="MyList.txt"
while IFS= read -r file;
do
# printf '%s\n' "$file"
# run the script for the following directories (Rep1, Rep2. ...)
for f in Rep1 Rep2
do
# pull the output file
outFile="RepOut_${f}.out"
printf "\noutFile:\t%s\n" "$outFile"
# create a summary folder at the end of the run
summaryFile="summary_${f}_$file"
printf "summaryFile:\t%s\n" "$summaryFile"
# run the python file, get the inputs from /home/mySFiles/ with the variable $file
echo python /home/PhytonFiles/phytonFile.py -s "/home/mySFiles/$file" -o "$outFile" -n "$summaryFile"
done
done < "$input"
また、この種の問題に関する良いヒントがありますが、Python行の前に「echo」という単語を置くことです。そのまま実行すると、行の各繰り返しがどのような様子かプレビューできます。
正しいと思われる場合は、最初から「echo」を削除して再実行すると、実際にコードが実行されます。
頑張ってください。