我有一个名为wsjs.sh
的脚本:
#!/bin/bash
WS=/home/user/wsjs
cd $WS
nohup atom . &
gnome-terminal
grunt watch
如果我在bash中运行它:
./wsjs.sh
然后原子编辑器,gnome-terminal分别启动,当前的bash显示:
user@ubuntu:~$ ./wsjs.pwd
nohup: appending output to ‘nohup.out’
Running "watch" task
Waiting...
现在如果按ctrl + c
,grunt watch
退出,原子编辑器也会关闭。
......这很奇怪。
我手动输入bash中的每个命令,并且原子未关闭。 我用gedit替换了atom并运行脚本,它没有关闭。
为什么原子关闭了?谢谢!
答案 0 :(得分:3)
这导致因为在执行shell脚本时,它有一个进程id,并且执行文件内的命令将具有脚本文件的父进程id。 因此,在终止或Ctl + C脚本文件时,它也会终止子进程(在您的情况下
cd $WS
nohup atom . &
gnome-terminal
grunt watch
) 执行单个命令时有独立的进程ID。
希望你明白了。
答案 1 :(得分:2)
我认为您希望运行脚本的行为与在交互式shell中运行其中的命令完全相同。
如果这确实是你的意图,那么就不要运行
./wsjs.pwd
...在自己的shell中运行脚本;相反,运行
source wsjs.pwd
...或其POSIX兼容的等价物,
. wsjs.pwd ## the space is not a typo!
...在您预先存在的shell中运行脚本。