我正在尝试编写一个bash脚本来创建一个具有一组特定窗口的屏幕(软件)会话,并cd
创建每个窗口上的特定目录。
这是我到目前为止的脚本:
#!/bin/bash
killall screen;
screen -AmdS work;
screen -S work bash -c "cd myDir";
问题是我似乎无法更改该会话上的目录。运行此脚本后,我运行$ screen -r
,当前目录仍然是我的默认目录(〜/)。
(我尝试将cd
命令更改为touch myFile
,运行脚本后文件就在那里了)
答案 0 :(得分:2)
尝试以下操作,它将打开一个带有bash的新屏幕会话,该会话将更改目录并使用此目录打开一个新的bash作为当前:
screen -S work bash -c 'cd myDir && exec bash'
添加-d -m
以在分离模式下运行它。重新连接后,您将进入myDir
:
screen -S work -d -m bash -c 'cd myDir && exec bash'
更好的解决方案
以下代码将创建一个分离的屏幕,其中包含3个屏幕,每个屏幕在目录myCommand1/2/3
中运行myDir1/2/3
。
cd myDir1
screen -S work -d -m
screen -S work -X exec myCommand1
screen -S work -X chdir myDir2
screen -S work -X screen
screen -S work -X exec myCommand2
screen -S work -X chdir myDir3
screen -S work -X screen
screen -S work -X exec myCommand3
cd -
请注意最后cd -
将返回原始工作目录。
最后,只需使用screen -r work
附加正在运行的屏幕会话。
答案 1 :(得分:2)
您可以将要运行的命令行(包括最终换行符)保存到寄存器中并将其粘贴到屏幕输入中:
screen -S work -X register c $'cd myDir\n'
screen -S work -X paste c