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

时间:2009-10-04 21:23:21

标签: gnu gnu-screen

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

8 个答案:

答案 0 :(得分:28)

请参阅gnu screen chdir命令。在屏幕中创建的所有新窗口都将此作为其初始目录使用。使用此功能,您可以执行类似

的操作
chdir /home/dan/newscreendir
screen

您的新窗口(以及任何将来创建的窗口)将位于set目录中。如果它始终是当前正在运行的目录,您可以在screenrc中设置一些内容,以便在一个命令中执行此操作。

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

Screen chdir command

屏幕无法访问您的shell变量,也无法执行反向命令。我可以通过一次点击完成最接近的操作就是使用像这样的小型bash脚本

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

或更紧凑

screen -X eval "chdir $PWD"

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

答案 1 :(得分:10)

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

  

绑定^ x

     

bind ^ x stuff“screen -X chdir \ $ PWD; screen ^ M”

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

由于该网站似乎已经消失,您可以在此处找到它的存档:Michael Kelleher's Personal Website on Archive.org

答案 2 :(得分:7)

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

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

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

答案 3 :(得分:4)

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

答案 4 :(得分:2)

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

bind c stuff "screen bash^M"

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

注意:默认情况下,您必须确保screen 启动login shell,因为这会导致shell在默认目录中启动对于登录shell而不是当前目录。这意味着在 .screenrc 文件中,您的shell命令不能包含短划线(' - ')字符。

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

shell -$SHELL

但这是正确的(即启动登录shell):

shell $SHELL

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

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

bind c stuff "screen bash -l^M"

答案 5 :(得分:1)

您也可以运行:

screen -X eval "chdir $(pwd)"

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

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

答案 6 :(得分:0)

如果您希望每次使用同一个命令,请在.screenrc中添加使用chdir命令的行。

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

screen -X chdir [arg]

如果没有参数,它将是您的主目录,与键入cd的结果相同。

如果您有一个脚本(这是一个编程q&amp;网站)或者在屏幕外并且屏幕正在运行,您可以发出:

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

您可能会在屏幕上运行一些新流程:

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

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

答案 7 :(得分:0)

我有一个近乎完美的bash解决方案。 :)

  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"'
    
  3. 希望屏幕开发人员尽快添加环境变量PWD