在另一个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/”