从当前命令的中间运行一个子shell


16

在这种情况下,我经常发现自己。我正在输入命令,在完成命令之前,我需要检查其他内容。

有没有一种方法可以打开某种类型的子shell,到目前为止我的当前输入仍然被记住,然后当我退出该子shell时,我又回到了原来的状态?

$ mylongcommand -n -e <SOME KEY COMBINATION WHICH OPENS A SUBSHELL>
$ date
...
$ exit
$ mylongcommand -n -e <BACK TO WHERE I WAS>

我在用着 zsh


2
为什么不只打开另一个终端窗口?
Barmar

@Barmar对我来说,我在大多数linux系统上都不使用GUI,因此必须切换TTY。这意味着我必须重新进行身份验证。以下选项效率更高。
扎卡里·布雷迪

3
您可以使用screentmux在控制台上获得多个虚拟终端。
Barmar

Answers:


16

有一些按键组合EscQ可以保存命令缓冲区并允许输入新命令。运行命令后,缓冲区包含您之前输入的内容。如果必须在完成该命令之前运行另一个命令,则可以EscQ再次键入。

(在按下后,我没有尝试打开子壳EscQ。)

参见http://zsh.sourceforge.net/Intro/intro_10.html并搜索“ esc-q”


这正是我想要的,非常感谢!我可以使它运行嵌套的shell而不是立即返回,但是对于我的用例,立即返回是完美的。
Panayiotis


7

我对这个解决方案是决定性的技术含量低和笨重,而是依赖于密钥序列你可能已经熟悉了:命中Ctrl+ A,然后#,然后ENTER

这样的效果是#在行的开头插入a ,从而使其成为注释,然后执行它,从而将其推入命令历史记录中。然后,您可以输入辅助命令,然后在命令历史记录中向上滚动到注释的命令,删除#并根据需要完成命令。


您应该按下键盘上的“主页”按钮,这样可以节省1次按键,以及实际按下它所需要的能量
Ferrybig

@Ferrybig-是的,这很好,尽管对于我来说,我的日常键盘是没有HOME键的MacBook Pro 。的HOME当量是FN + 左箭头,但向上滚动到终端的顶部。
Digital Trauma

2

我键入Ctrl+ Z来“暂停”我正在键入的命令,然后键入另一个命令。运行该命令(或用Ctrl+ 中止该命令C)后,被挂起的命令将返回以进行编辑(甚至记住光标位置)。为了进一步方便,如果在键入Ctrl+ 时命令行为空Z,则该键将调用bg内置函数(因此,double Ctrl+ Z将正在运行的命令直接发送到后台)。

fancy-ctrl-z () {
  emulate -LR zsh
  if [[ $#BUFFER -eq 0 ]]; then
    bg
    zle redisplay
  else
    zle push-input
  fi
}
zle -N fancy-ctrl-z
bindkey '^Z'          fancy-ctrl-z

(以前发布在记住半类型的命令时,我检查了主要针对bash的解决方案时,那里做不到任何方便的事情。这是to 的内置绑定的M-qpush-line略微版本。)

这不会运行子外壳程序:您在“挂起”前一个命令后键入的命令在同一外壳程序中运行。如果您在键入要在其他目录中运行的命令后意识到,就可以执行更改当前目录之类的操作。如果要运行新的Shell实例,则可以zsh从键绑定运行,但是我认为这不是特别有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.