我使用awk
来解析/etc/hosts
并产生一个命令,它将为我设置格式MapR
。它在bash
效用正在做的Chef
:用awk产生一个bash命令给失控的字符串常量 - awk
egrep '^[0-9]' /etc/hosts | grep -v 127.0.0.1 \
| awk 'NR==1{ips=$1}
NR>1{ips=ips ", " $1}
$2=="namenode"{nn=$1}
END{ printf "/opt/mapr/server/configure.sh -C %s -Z %s -N mycluster --create-user -D /dev/xvdb\n", ips, nn}' \
| bash
sleep 60
上面的命令应执行以下命令:
/opt/mapr/server/configure.sh -C 10.32.237.251 -Z 10.32.237.251 -N mycluster --create-user -D /dev/xvdb
然而,寻找到我的chef
输出我看到:
==> namenode: Executing awk utility
==> namenode: awk: line 1: runaway string constant "/opt/mapr/ ...
该命令从来没有在MapR
节点执行...但是,当我直接在终端上执行它,它很好地工作它应该是这样的。我究竟做错了什么? 我更新的问题,以显示完整的bash
脚本执行该实用程序:
DISK_CONFIG=/home/ubuntu/disk_config
if [ -f $DISK_CONFIG ];
then
echo "File already exists"
else
echo "Executing awk utility\n"
touch $DISK_CONFIG
egrep '^[0-9]' /etc/hosts | grep -v 127.0.0.1 \
| awk 'NR==1{ips=$1}
NR>1{ips=ips ", " $1}
$2=="namenode"{nn=$1}
END{ printf "/opt/mapr/server/configure.sh -C %s -Z %s -N mycluster --create-user -D /dev/xvdb\n", ips, nn}' \
| bash
sleep 60
fi
你写的东西看起来无可挑剔(很好,足够干净以至于不会产生那个错误,无论如何)。因此,我们必须猜测,您已经执行了某些与您向我们显示的脚本不同的内容。我建议删除'| bash'和'sleep 60',并通过'bash -x'运行脚本的其余部分。看看你给了什么。 (当我在Mac上试用时,它'有效',虽然没有'namenode'值,所以命令只有'-Z'和'-N'之间的空格。) – 2015-03-31 05:59:36
@JonathanLeffler我添加了剩余的脚本。这是一个由厨师执行的bash脚本。我也不认为'| bash'和'sleep 60'是原因,因为他们之前没有。 – cybertextron 2015-03-31 06:16:26
'| bash'和'sleep 60'都不会导致你的问题,但是在测试时,你不想意外执行'configure.sh'脚本,也不想在试图尝试脚本之间等待60秒。无论是“厨师”都在搞砸你,还是没有运行你认为正在运行的代码。我不熟悉'厨师'。在命令行测试你的脚本(没有bash或睡眠)。使用'bash -x yourscript.sh'来查看正在发生的事情。如果它是你展示的,你不应该得到错误。你是否意外地使用了一个文字处理双引号(''''或''''而不是''')? – 2015-03-31 06:32:50