【问题标题】:Bash command substution errorBash 命令替换错误
【发布时间】:2012-02-19 08:58:38
【问题描述】:

代码:

`cat <(fgrep -i -v "$DAEMON_TEST" <(sudo -u asm crontab -l)) <(echo "$CRON") | sudo -u asm crontab -`

错误:

command substitution: line 46: syntax error near unexpected token `('
/etc/init.d/asm: command substitution: line 46: `cat <(fgrep -i -v "$DAEMON_TEST" <(sudo -u asm crontab -l)) <(echo "$CRON") | sudo -u asm crontab -'

通过将变量替换为相关字符串,直接运行到 shell 中时,该命令运行良好

这里是变量:

DAEMON_TEST=asm_test.php
CRON="*/15 * * * * /opt/asm/daemons/test.php"

【问题讨论】:

  • 我不是 100% 确定该命令的作用,但我 100% 确定它不需要这么多命令和进程替换和管道
  • 您将 DAEMON_CONTROLLER 作为变量,并且您在命令 sub 中使用 DAEMON_TEST?
  • 只是一个建议,您可以将&lt;(echo "$CRON")替换为&lt;&lt;&lt; "$CRON
  • 它检查是否发现 DAEMON_TEST 作为 cron 作业,如果是,则将该行替换为 CRON。如果没有,则附加它。
  • @Jaypal:我粘贴的变量不正确,有一个变量叫DAEMON_TEST.php

标签: bash cron init.d


【解决方案1】:

这个问题最终完全无关。

改变:

#/bin/sh

到:

#/bin/bash

我从来没有意识到会有不同

https://superuser.com/questions/125728/what-is-the-difference-between-bash-and-sh

【讨论】:

  • 具体来说,sh 不支持进程替换sh。
猜你喜欢
  • 1970-01-01
  • 2014-06-07
  • 2016-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
相关资源
最近更新 更多