50

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

4

8 回答 8

36

请参阅 GNU 屏幕chdir命令。在 Screen 中创建的所有新窗口都使用它作为它们的初始目录。使用它,您可以执行以下操作:

chdir /home/dan/newscreendir
screen

您的新窗口(以及任何未来创建的窗口)将位于设置目录中。如果它始终是当前工作目录,您可以在您的设备中设置一些东西screenrc来执行此一合一命令。

请参阅GNU Screen 手册页。它相当全面。

屏幕 chdir 命令

Screen 无法访问您的 shell 变量,也无法执行反引号命令。我可以一键完成它的最接近方法是使用这样的小型 Bash 脚本:

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

或者更简洁:

screen -X eval "chdir $PWD"

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

于 2009-10-04T21:58:52.780 回答
13

简单的解决方案是将以下字符串放入~/.screenrc文件中,然后使用Ctrl+X打开新窗口:

bind ^x

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

http://www.michaelkelleher.info为中级/高级屏幕用户提供了更多提示,但由于该站点似乎已经消失,您可以在 Archive.org 上的 Michael Kelleher 个人网站上找到它的存档。

于 2010-07-19T14:33:01.113 回答
10

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

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

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

于 2012-06-30T17:52:09.537 回答
5

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

于 2013-08-15T18:18:41.483 回答
5

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

bind c stuff "screen bash^M"

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

注意:您必须确保 Screen默认情况下启动登录 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"
于 2015-10-20T16:26:57.210 回答
1

你也可以运行:

screen -X eval "chdir $(pwd)"

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

screen -X eval "chdir $(pwd)" screen
于 2013-01-30T08:54:54.053 回答
0

如果您每次都需要相同的命令,请在您的.screenrc文件中添加一行使用该命令的行。chdir

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

screen -X chdir [argument]

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

如果您有脚本(这是一个编程问答网站)或在 Screen 之外并且 Screen 正在运行,您可以发出:

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

您可能会在 Screen 中运行一些新进程,其中包括:

`which screen` -x -X screen [command to run in that directory] [arguments for the command]
于 2012-08-10T17:10:26.900 回答
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"'
    

只希望Screen的开发者PWD尽快添加环境变量。

于 2013-12-06T07:40:43.623 回答