在另一个bash脚本中执行脚本

时间:2018-10-26 22:41:30

标签: bash

在我的服务器上,我尝试运行:

#!/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

结果是:

无法执行:没有这样的文件或目录

您的帮助,如何进行编辑/修改才能成功运行?

3 个答案:

答案 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