shell脚本调用外部脚本的问题
答案:2 悬赏:40 手机版
解决时间 2021-03-01 13:06
- 提问者网友:末路
- 2021-02-28 18:21
写了两个脚本,姑且称为脚本1、2,1会调用2。2会启动一个jar包并在后台运行,然后ps取出jar包运行的pid,该脚本单独运行无异常。执行脚本1,1调用2,2启动jar包,输出pid,完毕。但是在命令行ps去找jar包运行的pid时,则发现找不到,jar包并没有运行。请教原因。有没有可能jar包运行了一瞬间就停止了呢?之后我在1调用2的命令后加了sleep 1,神奇的事情发生了,jar包启动无异常,怎么破????
最佳答案
- 五星知识达人网友:行雁书
- 2021-02-28 19:09
估计是因为脚本1中使用了cd命令改变了当前路径,脚本2中继承了脚本1中的当前路径;而一旦脚本1结束回到主shell,这个当前路径也就不复存在。
如果在脚本2基于这个当前路径启动jar包前,脚本1结束了,那么当前路径肯定回到了主shell的设置去了,jar包就启动不了了。
任何外部调用的shell命令执行都会产生一个进程,都会有一个pid,即使最终执行是返回错误。
所以,两点建议:
1)脚本1调用2的命令行后加上 &,置入后台运行,这样就不会因为脚本1的结束而影响脚本2的运行。
2)脚本中尽量不要用cd命令跳转目录,尽量使用绝对路径。
如果在脚本2基于这个当前路径启动jar包前,脚本1结束了,那么当前路径肯定回到了主shell的设置去了,jar包就启动不了了。
任何外部调用的shell命令执行都会产生一个进程,都会有一个pid,即使最终执行是返回错误。
所以,两点建议:
1)脚本1调用2的命令行后加上 &,置入后台运行,这样就不会因为脚本1的结束而影响脚本2的运行。
2)脚本中尽量不要用cd命令跳转目录,尽量使用绝对路径。
全部回答
- 1楼网友:第四晚心情
- 2021-02-28 19:57
问题在于./1.sh永远在执行, i=0永远不会被执行。
解决执行的方法可以在./1.sh后面加上& 这样就在后台执行了。
./1.sh &
但是在后台执行需要注意, 就是2.sh结束了 1.sh也不会结束。需要在脚本里面设置kill杀掉他
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯