如何将长 shell 命令分成由“\”分隔的多行?

PyG*_*Guy 6 bash terminal zsh

我需要运行一系列长行 bash 命令。每次尝试时,我都需要更改一些参数并重新运行命令。

我知道最好的情况是用 换行"\",但这只能附加参数。

有没有办法在长 bash 命令中间注入a ?类似或在大多数编辑环境中。"\" + "\n"Shift+EnterCtrl+Enter

例如,我从历史记录中调出了下面的命令,我想对其进行编辑:

$ execute_command -a /path/to/file -b another_option -c third_option
Run Code Online (Sandbox Code Playgroud)

到:

$ execute_command \
  -a /path/to/file \
  -b another_option \
  -c third_option
Run Code Online (Sandbox Code Playgroud)

回答

根据@benjamin-w的建议,可以使用Ctrl-X-E组合键。这将打开默认编辑器,您可以将现有命令分成由 分隔的多行"\",并在退出时将其放在命令行上。

Pau*_*ges 1

v从技术上讲,在大多数文档中,它是“未绑定的”,但是当我在命令行(在vi模式下)上输入并且需要编辑时,我点击了<ESCAPE>v。我一直在vi模式下运行 ( set -o vi),因此这会将我当前的整个命令缓冲区放入一个vi会话中,在其中我可以使用编辑器的全部功能来添加换行符、更正拼写和标点符号、重新思考我的逻辑等,然后再提交缓冲。当您保存并退出时vi,保存的缓冲区一次一行地输入到解析器,就像您在命令行上按顺序完成它们一样。

请注意,当您退出时,无论您保存还是退出而不进行任何更改,缓冲区都会执行,因此如果您不希望它执行任何操作,请将您的工作保存在某个位置:w somefile,然后删除所有行并保存缓冲区出口。“空”缓冲区是唯一的无操作。

目前我找不到这方面的文档,但我已经在 HPUX 和 SunOS ksh 以及各种版本的 linux bash 中使用它数十年了。

否则,我建议复制,取消,粘贴到您最喜欢的缓冲区/编辑器中,修复它,复制,然后粘贴回命令行,哈哈


### 旧答案
正如您所说,反斜杠转义换行符,解析器将有效地忽略它。
$: echo \
> this \
> is \
> all
this is all
Run Code Online (Sandbox Code Playgroud)

只要确保它是该行的最后一个字符即可。
参见此页面了解更多信息。

任何正确引用的换行符都可以包含在您的输出中,因为它们现在是数据的一部分。

$: echo "
> this
> is
> all"

this
is
all
Run Code Online (Sandbox Code Playgroud)

您还可以将它们单独作为数据传递。

$: echo this $'\n' is $'\n' all
this
 is
 all
Run Code Online (Sandbox Code Playgroud)