私のコードがどのように機能するのか理解できません。私はこのプロジェクトに初めてアクセスし、以前はUnixを学んだことがありません。私の同僚は私にプログラムの実行方法をすばやく示しましたが、その仕組みについては説明しませんでした。
makeを実行してすべてのC ++ファイルが正しくコンパイルされたことを確認した後、彼はコマンドプロンプトに行き、次のように入力しました。./run.sh list.txt
run.sh
ファイルを見ました。次のように:
DIR=/directory/scripts/binaries/what
LIST=$1
while read PDF
do
echo "HOLD ON ${PDF}..."
./makeInputAX.sh ${PDF} ${PDF} >INPUT/${PDF}.something
${DIR} -AX INPUT/${PDF}.something # I don't want to reveal the actual types of files I'm dealing with, so I called them 'something'
done < ${LIST}
ファイルmakeInputAX.sh
は次のとおりです
$PDF=1
echo "THEFILE ABC/{PDF}.something"
以下list.txt
を含みます。
12345
だから私はすでにrun.sh
内部コンテンツを読み、変数にlist.txt
割り当てる方法を知っています。コマンドプロンプトで見ました。私を混乱させることは、最初に実行してから呼び出すと思いましたが、割り当てがない場合はどのように割り当てますか?12345
LIST
HOLD ON 12345
run.sh
makeInputAX.sh
PDF
list.txt
makeInputAX.sh
run.sh
また、私を混乱させることは、コマンドプロンプトでプロジェクトの一部であるcppファイルに書かれたプログラムの出力を見ることができるということです。ただし、ファイルは代わりに別のディレクトリにあります/directory/scripts/binaries/what
。これらのcppファイルを変更して新しい出力を確認したかったのですが、エラーが発生しました。
could not open the somethingelse file for read
しかし、could not open the ..
私のC ++コードには書かれていません。この問題を解決するには、私のcppファイルを調べる必要がありますか、それともこのshファイルが役に立ちますか?
答え1
$1
スクリプトの最初のパラメータです。list.txt
LIST=$1
そのファイル名をLIST
変数にコピーすると、$LIST
変数lists.txt
も含まれます。そうではありません12345
。
while read PDF
do
...
done < ${LIST}
ファイルにリダイレクトされた標準入力を使用してループを開始しlist.txt
、ループを通過するたびにファイルから変数に1行を読み込みますPDF
。したがって、$PDF
`12345が含まれます。
の変数はのmakeInputAX.sh
変数とは何の関係もありませんrun.sh
。したがって、それらはそれぞれという名前の独自の変数を持ち、PDF
独立して機能します。唯一の例外は、export
コマンドを使用して宣言される環境変数です。呼び出しスクリプトに設定されている環境変数は、呼び出すスクリプトの環境にコピーされます(その逆ではありません)。
スクリプトで「読み取るために他のファイルを開けません」という内容は表示されません。これはC ++プログラムからのものであるに違いありません。おそらく、プログラムが呼び出すライブラリにあるので、コードのどこにでもメッセージを見ることはできません。
しかし、makeInputAX.sh
スクリプトが正しくないようです。おそらく次のようになります。
PDF=1
echo "THEFILE ABC/${PDF}.something"
$
他のコマンドに変数値を挿入するときは、代入に使用しないで変数の前に置いてください。それを逆さまに持ってきて、$
課題には使いましたが、echo
コマンドには使用しませんでした。