我有以下脚本-它有点作品。
#!/bin/bash
... define plugins, etc
for plugin in ${plugins[@]};
do
screen -t $plugin
done
我想要它做什么
打开 gnu-screen 并为每个插件(目录名)启动一个新选项卡,以插件名称作为选项卡的标题。
它现在做什么
打开 gnu-screen 并在 screen 实例中打开第一个插件(具有正确的标题),但不会继续运行命令。所以当我退出第一个 screen 时,第二个插件会在 screen 实例中打开,当我退出时,第三个插件会打开,等等。
我缺少什么
我只想说screen -t $plugin &&
,例如,运行这个东西,然后运行下一个。但我不确定如何在 for 循环中做到这一点
答案1
#!/bin/bash
plugins=(Plugin1 Plugin2 Plugin3)
plugin_cmd="#!/bin/bash\necho This is plugin __placeholder__\n"
for plugin in ${plugins[@]};
do
echo -e ${plugin_cmd/__placeholder__/$plugin} > /tmp/${plugin}.bash
chmod +x /tmp/${plugin}.bash
screen -dmS $plugin
screen -S $plugin -X stuff "/tmp/${plugin}.bash\n"
screen -d -r -S $plugin
done
听取 Thom Wigger 的建议并切换到 tmux。
答案2
为什么不生成自定义的.screenrc?
例如,如果您的插件文件夹不经常更改,则将其写入文件。
# Setting custom things:
startup_message off
# starting a few shells with a preselected title
screen -t plugin1 0
screen -t plugin2 1
screen -t plugin3 2
screen -t my_email -a -l exec elm
如果插件的数量经常变化,那么您可以使用 bash 脚本将它们写入文件。例如
rm ~/my_custom_screenrc
echo "# Setting custom things:" > ~/my_custom_screenrc
echo "startup_message off" >> ~/my_custom_screenrc
接下来是你的 bash 脚本,你在其中更改
for plugin in ${plugins[@]};
do
screen -t $plugin
done
使用 echo 将追加 ( >>
) 到与上面相同的文件。
最后启动屏幕。例如screen -c ~/my_custom_screenrc
这远非一个完美的答案,我希望如此恰当的一周内就会有答案。但我看不出有什么办法可以将其作为评论发布,同时还能保留足够的标记以使其易于理解。
答案3
你应该试试:
screen -t $plugin xterm &
而不是你的版本。屏幕打开一个新的壳,你将被困在里面,没有任何可能继续做循环;因此 & 符号确保控制权立即返回到做循环,while终端(或者 konsole,或者任何你喜欢的名字)提供了一个地方,可以说,屏幕在这里执行其工作。