Answers:
默认情况下,screen
还会绑定C-a C-c
以创建一个新窗口,因此您可能需要向您添加另一行.screenrc
以处理这种情况:
bind c stuff "screen -X chdir \$PWD;screen^M"
bind ^c stuff "screen -X chdir \$PWD;screen^M"
关于此命令如何工作的说明:
stuff
将其参数字符串直接放入当前窗口:
命令:
stuff string
将字符串填充到
string
当前窗口的输入缓冲区中。
screen -X chdir \$PWD
告诉屏幕执行命令chdir
,该命令将其操作目录(将在其中打开新的屏幕窗口)更改为环境变量$PWD
,其中包含当前工作目录。这不可能在.screenrc
一个人内完成。因此,stuff
必须使用来操纵输入缓冲区。
screen
已运行中的命令screen
会像一样创建一个新窗口C-a C-c
。
^M
生成一个回车,该回车告诉外壳程序执行缓冲区中现在的命令。没有它,您将必须按enter
(或C-m
,当然)。
因此,此绑定将在您在其中执行窗口的窗口中留下这样的内容:
user@host:~/directory$ screen -X chdir $PWD;screen
user@host:~/directory$
stuff
字符串。
下面是一份我自己的答案,以在stackoverflow.com一个类似的问题:
要使屏幕在当前目录中打开一个新的选项卡/窗口,您可以在
.screenrc
文件中添加以下代码:bind c stuff "screen bash^M"
这将导致Ctrl+ a c 命令在当前窗口/选项卡的目录中打开新的选项卡/窗口。
注意:必须确保
screen
没有不启动登录shell默认情况下,因为这将导致一个登录shell,而不是当前目录的缺省目录外壳的开始。这意味着在.screenrc
文件中,shell
命令中不能包含破折号('-')。例如,这是错误的(即它将启动登录外壳程序):
shell -$SHELL
但这是正确的(即,它将不会启动登录shell):
shell $SHELL
注意2:不幸的是,此方法的行为并不完全类似于中的默认new window / tab命令
screen
。相反,它将命令写入当前窗口并执行以创建新的窗口/选项卡,因此在长时间运行的Shell进程中将无法使用该命令。换句话说,仅在可以执行常规外壳命令时才可以执行此键盘快捷键。注意3:如果要
screen
在当前目录中打开新的windows / tabs 并打开登录外壳,可以将以下代码添加到.screenrc
文件中:bind c stuff "screen bash -l^M"