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

Rio*_*Rio 47 gnu gnu-screen

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

Dan*_*ood 31

请参阅gnu screen chdir命令.在屏幕中创建的所有新窗口都将此作为其初始目录使用.使用它你可以做类似的事情

chdir /home/dan/newscreendir
screen
Run Code Online (Sandbox Code Playgroud)

您的新窗口(以及任何将来创建的窗口)将位于set目录中.如果它总是成为当前正在运行的目录,那么您可以在自己的设置中进行设置screenrc.

请参阅gnu屏幕手册页,它非常全面.

屏幕chdir命令

Screen无法访问您的shell变量,也无法执行反向命令.我能在一次点击中最接近这一点就是使用像这样的小型bash脚本

screen -X setenv currentdir `pwd`
screen -X eval 'chdir $currentdir' screen
Run Code Online (Sandbox Code Playgroud)

或者更紧凑

screen -X eval "chdir $PWD"
Run Code Online (Sandbox Code Playgroud)

screen -X将命令发送到当前运行的屏幕会话.第一行创建一个名为的变量currentdir.第二行发送currentdirchdir命令,然后创建一个新的屏幕窗口.


Mik*_*ike 10

简单的解决方案是将以下字符串放在〜/ .screenrc中,然后使用Cx打开新窗口:

绑定^ x

绑定^ x东西"屏幕-X chdir\$ PWD;屏幕^ M"

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

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

  • 如果您要使用 'stuff',则不需要 'chdir': bindkey ^x stuff "screen^M"(那里有文字 '^M')做必要的事情。唯一的缺点是,当您使用它时,它会在您所在的任何窗口的 shell 中留下一个额外的命令,但我想这是一个很小的代价。我自己现在正在使用这个解决方案。 (2认同)
  • 当当前打开的窗口运行 vim 时,Mike 的解决方案似乎不起作用。任何想法都会受到欢迎。 (2认同)

小智 8

当你已经在窗口中运行进程时,我没有找到任何可行的解决方案,所以我想出了自己的想法.我在.bash_profile中添加了以下行:

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

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


jth*_*jth 5

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


sti*_*kj1 5

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

bind c stuff "screen bash^M"
Run Code Online (Sandbox Code Playgroud)

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

注意:您必须确保 Screen 默认情况下不会启动登录shell,因为这将导致 shell 在登录 shell 的默认目录而不是当前目录中启动。这意味着在您的.screenrc文件中,您的shell命令不能包含破折号(“-”)字符。

例如,这是错误的(即,它将启动登录 shell):

shell -$SHELL
Run Code Online (Sandbox Code Playgroud)

但这是正确的(即,它不会启动登录 shell):

shell $SHELL
Run Code Online (Sandbox Code Playgroud)

注 2:不幸的是,此方法的行为与 Screen 中默认的新窗口/选项卡命令并不完全相同。相反,它将命令写入当前窗口并执行它以创建新窗口/选项卡,因此在某些长时间运行的 shell 进程中它将不起作用。换句话说,只有在可以执行普通 shell 命令时才能执行此键盘快捷键。

注3:如果您希望Screen在当前目录中打开新的窗口/选项卡打开登录shell,您可以将以下代码添加到您的.screenrc文件中:

bind c stuff "screen bash -l^M"
Run Code Online (Sandbox Code Playgroud)