Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在另一个bash脚本中执行脚本_Bash - Fatal编程技术网

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

在另一个bash脚本中执行脚本,bash,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

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

#!/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
#/bin/bash
PATH=“/SANCFS/stats/scripts/”

对于((i=6;i不要使用
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
!/bin/bash
PATH=“/SANCFS/stats/scripts/”
对于((i=6;i>/home/stats/201810/load_cdrsIMRMM4-0“$i”。确定2>/home/stats/201810/load_cdrsIMRMM4-0“$i”。错误
完成

不要使用运行指定命令的进程替换当前进程的
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
!/bin/bash
PATH=“/SANCFS/stats/scripts/”
对于((i=6;i>/home/stats/201810/load_cdrsIMRMM4-0“$i”。确定2>/home/stats/201810/load_cdrsIMRMM4-0“$i”。错误
完成

这里有一个更简单的方法来重现您的问题:

$ exec "echo "hello world""
bash: exec: echo hello: not found
bash
中运行命令不需要添加
exec
或引号:

$ echo "hello world"
hello world
此外,在一种情况下,您在单引号中使用了
$i
,并且您似乎无缘无故地覆盖了shell搜索路径
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
!/bin/bash
对于((i=6;i>/home/stats/201810/load_cdrsIMRMM4-0“$i”。确定2>/home/stats/201810/load_cdrsIMRMM4-0“$i”。错误
完成

这里有一个更简单的方法来重现您的问题:

$ exec "echo "hello world""
bash: exec: echo hello: not found
bash
中运行命令不需要添加
exec
或引号:

$ echo "hello world"
hello world
此外,在一种情况下,您在单引号中使用了
$i
,并且您似乎无缘无故地覆盖了shell搜索路径
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
!/bin/bash
对于((i=6;i>/home/stats/201810/load_cdrsIMRMM4-0“$i”。确定2>/home/stats/201810/load_cdrsIMRMM4-0“$i”。错误
完成

您可以将exec替换为点(.) 如果您尝试这5个选项,您应该会看到不同的选项

$ exec /bin/bash

$ /bin/bash
$ . /bin/bash
$ ./bin/bash
$ /bin/bash /bin/bash

可以用点(.)替换exec 如果您尝试这5个选项,您应该会看到不同的选项

$ exec /bin/bash

$ /bin/bash
$ . /bin/bash
$ ./bin/bash
$ /bin/bash /bin/bash

为什么要将while命令行括在
exec
后面的双引号中?如果这样做,shell会将整个内容视为命令名。删除双引号,您应该会很好。除非您确定路径中不需要像/usr/bin这样的内容,否则您几乎肯定不希望像如果要将/SANCFS/stats/scripts/添加到路径中,请编写类似于
path=“$path:/SANCFS/stats/scripts/”的内容
为什么要将while命令行括在
exec
后面的双引号中?如果这样做,shell会将整个内容视为命令名。删除双引号,您应该会很好。除非您确定路径中不需要/usr/bin之类的内容,否则您几乎肯定不想重置路径像这样。如果您想将/SANCFS/stats/scripts/添加到路径中,请编写类似于
path=“$path:/SANCFS/stats/scripts/”