以下のbashスクリプトはファイルが存在するかどうかを確認し、そうでない場合はファイルを生成してから簡単なコードを記述します。一度はうまくいきましたが(理由はわかりません)、何かを変更したようで、これ以上機能しなくなり、エラーがどこにあるかがわかりません。
#...
template_file="~/mytest_template.c";
if [[ -z $template_file ]]; then
echo -e "#include <stdio.h>\n#include <stdlib.h>\n\n\nint main(int argc, char**argv){\n\n\t\n\nreturn 0;\n}" > ~/mytest_template.c;
fi
#sleep 0.5; ---> I tried this too.
cp ~/mytest_template.c mytest.c;
私が得るエラーは次のとおりです。
cp: cannot stat '/home/username/mytest_template.c': No such file or directory
ありがとうございます。
ベストアンサー1
if [[ -z $template_file ]]; then
この-z
演算子は文字列が空であるかどうかをテストします。ここで値はtemplate_file
割り当てたばかりなので、null ではありません。したがって、内部コマンドはif
実行されません。
スクリプトが実行される前にファイルが存在しない場合、スクリプトの実行時にファイルは存在しませんcp
。
ここで何をテストしたいのかわかりませんが、ファイルが存在しない場合に備えてファイルを生成するには! -f $filename
。-f
!
また、割り当てでは、チルダは拡張されませんが、引用符内にあるため、そのまま残ります。
template_file="~/mytest_template.c";
後続のリダイレクトやコマンドはcp
変数を使用しないため、問題はありません。
だから、
template=~/mytest_template.c
final=~/mytest.c
if [[ ! -f $template ]]; then
echo "..." > "$template"
fi
cp "$template" "$final"