【问题标题】:Run command in background in oneliner在 oneliner 的后台运行命令
【发布时间】:2018-07-18 10:45:37
【问题描述】:

我不确定这些类型的语句被称为什么,但基本上我正在尝试这样做:

[ "string" = "somethingelse" ] && dofuncwhentrue "param" || dofuncwhenfalse "param" &

所以任何一个函数都应该在后台运行,但我不确定在哪里放置 & 来实现这一点。

谢谢!

【问题讨论】:

  • 不要为了实现单行而牺牲可读性!
  • @Inian 我更喜欢阅读这个而不是 if 语句或 bash 中的 case,减少缩进。但如果别无选择,我会忍受这些空间。
  • 注意 <a> && <b> || <c> 不是 100% 等同于 if <a>; then <b>; else <c> fi:如果 <b> 具有非零退出状态,<c> 在第一种情况下也会被执行,但不是在第二。请参阅BashGuide 中的讨论。
  • @BenjaminW。接得好!我仍然可以使用答案,但这一定要注意。

标签: bash shell syntax background-process


【解决方案1】:

如果您尝试简单版本的 one-liner,您会看到这种行为。

/bin/true && sleep 10 || sleep 10 &
/bin/false && sleep 10 || sleep 10 &
sleep 10 && sleep 10 || sleep 10 &

在所有情况下,您都会看到 bash 立即将所有内容(包括测试)生成到后台。

如果你真的希望测试在前台运行,你可以用括号来构造行。

sleep 10 && (sleep 10 &) || (sleep 10 &)

正如 Inian 在评论中指出的那样,使用 if 会更具可读性,但这是一个有趣的问题!

【讨论】:

  • 感谢您在前台添加测试!正是我想要的。
猜你喜欢
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多