【问题标题】:Why is "& ;" invalid syntax?为什么是 ”& ;”无效的语法?
【发布时间】:2017-11-01 18:47:18
【问题描述】:

我正在尝试在终端上运行一个 for 循环,我希望将每个迭代发送到后台进程,以便它们同时运行。

以下是一条一条运行的命令

for i in *.sra; do fastq-dump --split-files $i ; done  # ";" only

我已经突出显示了分号。

同时运行这个工作

for i in *.sra; do fastq-dump --split-files $i & done  # "&" only

但这会报错

for i in *.sra; do fastq-dump --split-files $i & ; done  # "& ;"

如果有人解释这里发生了什么,那就太好了。我知道这应该以带有适当缩进的 shell 脚本方式编写,但有时我只有这个命令可以运行。

【问题讨论】:

  • 在发布您的 Q 之前学习使用 shellcheck.net。标记的错误是“SC1045:这不是 'foo &; bar',只是 'foo & bar'。”`。祝你好运。

标签: bash for-loop syntax


【解决方案1】:

&; 都终止它们之前的命令。

你不能写& ;,就像你不能写; ;& &一样,因为语言只允许一个命令被终止一次(并且不允许一个零字列表作为一个命令)。


因此:for i in *.src; do fastq-dump --split-files "$i" & done 完全正确,不需要额外的;

【讨论】:

  • 所以 & 在我的命令结束就足够了??您还可以在我的问题中看到突出显示的粗体分号。出于某种原因,虽然我选择了 B 选项,但它并不粗体
  • 你不能在代码块中加粗。是的,只需& 就足够了。
猜你喜欢
  • 2017-11-23
  • 1970-01-01
  • 2023-01-06
  • 2011-11-25
  • 1970-01-01
  • 2022-01-10
  • 2018-03-14
  • 1970-01-01
  • 2019-08-08
相关资源
最近更新 更多