在我的服务器上,我尝试运行:
#!/bin/bash
PATH="/SANCFS/stats/scripts/"
for (( i=6;i<=8;i++ ));
do
echo "Running $i"
exec "/SANCFS/stats/scripts/load_cdrs.sh --debug --config /SANCFS/stats/scripts/iquall-mm4-cdr.cfg --date '2018-10-0"$i"' >> /home/stats/201810/load_cdrsIMRMM4-0"$i".ok 2>>/home/stats/201810/load_cdrsIMRMM4-0"$i".err"
done
结果是:
无法执行:没有这样的文件或目录
您的帮助,如何进行编辑/修改才能成功运行?
答案 0 :(得分:2)
这是重现问题的简便方法:
$ exec "echo "hello world""
bash: exec: echo hello: not found
在bash
中运行命令不需要添加exec
或引号:
$ echo "hello world"
hello world
此外,在一种情况下,您在单引号中使用$i
,并且似乎无缘无故覆盖了外壳搜索路径PATH
。应用于您的示例:
#!/bin/bash
for (( i=6;i<=8;i++ ));
do
echo "Running $i"
/SANCFS/stats/scripts/load_cdrs.sh --debug --config /SANCFS/stats/scripts/iquall-mm4-cdr.cfg --date "2018-10-0$i" >> /home/stats/201810/load_cdrsIMRMM4-0"$i".ok 2>>/home/stats/201810/load_cdrsIMRMM4-0"$i".err
done
答案 1 :(得分:1)
请勿使用exec
。它将当前的进程替换为运行指定命令的进程,因此您无需重复循环。只需正常执行命令即可。
exec
的参数不应该全部放在单个带引号的字符串中。也许您将其与eval
混淆了?
#!/bin/bash
PATH="/SANCFS/stats/scripts/"
for (( i=6;i<=8;i++ ));
do
echo "Running $i"
/SANCFS/stats/scripts/load_cdrs.sh --debug --config /SANCFS/stats/scripts/iquall-mm4-cdr.cfg --date 2018-10-0"$i" >> /home/stats/201810/load_cdrsIMRMM4-0"$i".ok 2>>/home/stats/201810/load_cdrsIMRMM4-0"$i".err
done
答案 2 :(得分:0)
您可以将exec替换为点(。) 如果尝试5个选项,应该会看到不同的选项
$ exec /bin/bash
$ /bin/bash
$ . /bin/bash
$ ./bin/bash
$ /bin/bash /bin/bash