【问题标题】:How to "setup" screen using a bash script如何使用 bash 脚本“设置”屏幕
【发布时间】:2016-12-09 20:38:06
【问题描述】:

我正在尝试编写一个 bash 脚本来创建一个带有一组特定窗口的屏幕(软件)会话,并 cd 每个窗口上的特定目录。

这是我目前的脚本:

#!/bin/bash

killall screen;
screen -AmdS work;
screen -S work bash -c "cd myDir";

问题是我似乎无法在该会话中更改目录。运行此脚本后,我运行$ screen -r,当前目录仍然是我的默认目录(~/)。

(我尝试将cd 命令更改为touch myFile,并且在我运行脚本后文件就在那里)

【问题讨论】:

  • 如果您在终端中尝试bash -c "cd myDir",您会发现它不会更改目录。使用 screen 命令(not shell 命令)chdir 更改目录,然后打开一个新的 shell,它将在该目录中启动
  • 嗯——它改变了目录,但是它改变了你用bash命令启动的新shell的目录,而不是运行的shell/程序的目录它。并且由于新的 shell 在完成运行脚本后立即退出,它通过 bash -c...

标签: linux bash gnu-screen


【解决方案1】:

尝试以下操作,它将打开一个带有 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 个屏幕,每个屏幕在 myDir1/2/3 目录中运行 myCommand1/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 附加您的跑步屏幕会话。

【讨论】:

  • cd mydir && exec bash 避免将父进程留在内存中
  • @CharlesDuffy 更好,谢谢.. 我会用exec更新答案
【解决方案2】:

您可以将要运行的命令行(包括最后的换行符)保存到寄存器中,然后将其粘贴到屏幕输入中:

screen -S work -X register c $'cd myDir\n'
screen -S work -X paste c

【讨论】:

    猜你喜欢
    • 2012-06-16
    • 2011-11-21
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多