我写了一个看起来像这样的脚本(不起作用):
#!/bin/sh
screen -dmS "somename" $HOME/somescript.sh
j=13
for i in {0..5}; do
screen -dmS "name$i" $HOME/anotherscript.sh $i $j
j=10
done
如果我将其复制并粘贴到终端中,它会创建7个分离的屏幕会话,正如我所料。但是,如果我在脚本中运行它,那么当我运行screen -ls
时,我只获得第一个会话“somename”。
我意识到屏幕可用于在一个会话中创建多个窗口。这些脚本如何运行对我来说并不重要。我只是想了解为什么这不能用作脚本。
注意:我在没有任何合适的回复的情况下在SuperUser上提出了这个问题。我想也许这是一个错误的地方,可以被认为是一个编程问题。
答案 0 :(得分:4)
您可能被咬的一件事是您正在运行哪个特定shell的特定版本。 /bin/sh
实际上可能是bash,或者它可能是bourne,这可能会对你的循环语法的解释产生影响。例如,在旧版本的bash(v2.x)中也没有理解{0..5}
构造,也没有在bourne中理解(至少在我最终设法追踪/bin/sh
时不是这样。一个真实的,真实的伯恩贝壳: - )。
我建议如果你需要它的语法,请将你的shebang行更改为/ bin / bash,并检查你的bash是版本3.x或更高版本。既然你说它可以从命令行开始工作,那么我的赌注是在shebang线上。