如何使GNU屏幕在CURRENT工作目录中启动一个新窗口?

默认情况下,当你在GNU Screen中创build一个新窗口时,它将从调用屏幕的目录开始。 我想在当前窗口的当前工作目录中的GNU屏幕上开始一个新窗口。怎么做? 谢谢!

请参阅gnu screen chdir命令。 在屏幕上创build的所有新窗口都将其用作其初始目录。 使用这个你可以做类似的事情

chdir /home/dan/newscreendir screen 

并且你的新窗口(以及任何未来创build的窗口)将被置于设置目录中。 如果它始终是当前的工作目录,则可以在screenrc中设置一个命令来完成这一操作。

看到GNU屏幕手册页,这是相当全面的。

屏幕chdir命令

屏幕不能访问你的shellvariables,也不能执行反向命令。 最近我可以做到这一点是用这样一个小bash脚本

 screen -X setenv currentdir `pwd` screen -X eval 'chdir $currentdir' screen 

或更紧凑

 screen -X eval "chdir $PWD" 

“屏幕-X”将命令发送到当前正在运行的屏幕会话。 第一行创build一个名为“currentdir”的variables。 第二行将currentdir发送到chdir命令,然后创build一个新的屏幕窗口。

简单的解决方法是在〜/ .screenrc中input以下string,然后用Cx打开新窗口:

绑定^ x

绑定^ x stuff“屏幕-X chdir \ $ PWD;屏幕^ M”

http://www.michaelkelleher.info有更多关于中级/高级屏幕用户的提示。;

由于该网站似乎已经消失,您可以在这里find它的存档: Michael Kelleher在Archive.org上的个人网站

我没有find任何解决scheme,当你已经有一个进程在窗口中运行,所以我想出了我自己的想法。 我在.bash_profile中添加了以下几行:

 scr_cd() { cd $1 screen -X chdir $PWD } if [ "$TERM" == 'screen' ]; then alias cd=scr_cd fi 

每次更改目录时,都会更新屏幕的工作目录。 有人可能不喜欢这种方法,但它像一个魅力。

也许这是Byobu特有的,但是只需inputscreen在当前目录中打开一个新窗口。

在你的.screenrc ,如果你每次都需要使用chdir命令,

如果您在该会话中有一个正在运行的屏幕会话,则可以键入:

 screen -X chdir [arg] 

没有参数,它将是您的主目录,与inputcd相同的结果。

如果你有一个脚本(这是一个编程问答网站),或者在屏幕之外,屏幕正在运行,你可以发出:

 `which screen` -x -X chdir [arg] 

你可能会在屏幕上运行一些新的过程:

 `which screen` -x -X screen [command to run in that dir] [args for the command] 

我还没有find方法来找出它是什么,并将其改回(在脚本中),所以如果有人想要更新这个答案,请做。

你也可以运行:

 screen -X eval "chdir $(pwd)" 

或者,如果您要在设置chdir后立即启动新窗口,请使用:

 screen -X eval "chdir $(pwd)" screen 

我有一个几乎完美的解决schemebash。 🙂

  1. 如果您从不使用password设置锁屏密码,只需将其添加到$HOME/.bash_profile

     export PROMPT_COMMAND='screen -p $WINDOW -X chdir "$PWD"' 
  2. 需要密码? 有了这个:

     # the digest of password "abc" is ID1wIq4l2t7s6 export PROMPT_COMMAND='screen -p $WINDOW -X eval "password none" "chdir \"$PWD\"" "idle 0 password ID1wIq4l2t7s6"' 

只希望屏幕的开发者尽快添加环境variablesPWD

要使屏幕在当前目录中打开新的选项卡/窗口,可以将以下代码添加到.screenrc文件中:

 bind c stuff "screen bash^M" 

这将导致Ctrl + a c命令在当前窗口/选项卡的目录中打开新的选项卡/窗口。

注意:您必须确保screen默认不会启动loginshell ,因为这会导致shell在默认目录中启动loginshell而不是当前目录。 这意味着在.screenrc文件中,你的shell命令不能包含破折号(' – ')字符。

例如,这是错误的(即它将启动一个loginshell):

 shell -$SHELL 

但是这是正确的(即它不会启动loginshell):

 shell $SHELL 

注2:不幸的是,这个方法的行为与screen默认的新窗口/标签命令不一样。 相反,它将命令写入当前窗口并执行它以创build新的窗口/选项卡,因此在某个长时间运行的shell进程中,该命令不起作用。 换句话说,只有在执行正常的shell命令时才能执行该键盘快捷键。

注意3:如果你想要在当前目录下打开新的窗口/标签打开一个loginshell ,你可以添加下面的代码到你的.screenrc文件中:

 bind c stuff "screen bash -l^M"