在下面的 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
不为空,因为您刚刚分配给它。因此,里面的命令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"