我有一个很长的 Bash 命令。这个命令看起来像这样:
grunt build && mv file1.txt ../../results && mv file2.txt ../../logs && mv file3.txt ../home && mv file4.txt ../../../deployments
我正在将此命令添加到README.md
文件中。我想让它 a) 易于阅读和 b) 可复制和粘贴。我的问题是,如何为 Bash 制作一个易于阅读的多命令行?
我尝试了以下方法,但没有奏效:
grunt build && \
mv file1.txt ../../results && \
mv file2.txt ../../logs && \
mv file3.txt ../home && \
mv file4.txt ../../../deployments
谢谢你。
您可以使用反斜杠 ( \
)在下一行中继续执行命令,但前提是反斜杠位于终止该行的换行符之前。在您的代码中,几个反斜杠后有空格。删除它们。
注意,即使在.之后有未加引号、未转义的空格,Bash 也可以从下一行继续读取该命令&&
的末尾。但如果有一个逃逸的空间,就像你的情况一样。&&
这将起作用:
true && \
echo b # ^ no space here, newline character immediately after \
这将起作用:
true &&
echo b # ^^^^^^^^^ zero or more spaces, they don't matter
(更改true
到false
学习&&
确实它的工作。)
但这行不通*:
true && \
echo b # ^ escaped space here, it breaks things
转义的空间就像一个引用的空间。这也行不通*:
true && ' '
echo b # ^ quoted space here, it breaks things
* 好吧,如果
您的操作系统中有一个名为(文字空间)的命令,它将起作用。这在技术上是可能的,但非常非常不常见(如果我看到这样的可执行文件,我马上就会闻到一些腥味)。该代码段仍然无法按照您希望的方式工作,因为&&
将连接true
and
,而不是true
and echo
。
像这样的代码:
foo && \
bar
(\
正确转义换行符的地方)是有效的,但也是多余的。有可能:
foo &&
bar
一些用户不喜欢上述任何一项,因为通过检查行的开头,人们无法判断是否bar
应该有条件或无条件地运行。需要检查第一行的末尾(可能很长)才能找到&&
.
因此,人们可能更喜欢这样:
foo \
&& bar
这\
是强制性的,但很明显bar
应该取决于前一行,即使前一行很长并且没有立即发现反斜杠。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句