首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在bash循环中使用EOF的bash帮助

在bash循环中使用EOF的bash帮助
EN

Stack Overflow用户
提问于 2016-10-20 10:59:23
回答 1查看 901关注 0票数 0

我有一个脚本,它逐行读取一些输入信息,然后进入循环,然后,在循环内部,它根据从输入信息获取的信息创建带有一些扩展变量的json文件,这有时是不同的。

问题是,当我使用cat & EOF时,它会中断while循环,只从输入信息中读取第一行。您能否建议如何重写脚本以避免中断EOF函数的with循环:

代码语言:javascript
复制
while IFS= read -r snmp_cred; do
echo appliance $ADDM_address and $snmp_cred 
snmp_ip=$(grep -E -o "([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})@" <<< $snmp_cred)
snmp_ip=${snmp_ip%?}
echo IP for snmp community is $snmp_ip

json_file=$DIR/cred.json
remote_dir=/some/remote/dir

cat <<EOF > $DIR/cred.json
    {
        "some", 
        "json,          
    }
EOF


[Here goes some another commands]

done <$DIR/input.txt
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-20 11:22:30

代码看起来不错,但是这里完全可以避免使用cat。只需使用echoprintf

代码语言:javascript
复制
printf '\
{ 
  "ip_range" : "%s",
  "types" : [ "snmp" ],
  "description" : "%s",
  "snmp.version": "v2c",
  "snmp.port" : 161,
  "snmp.community" : "%s",
  "snmp.retries" : 3,
  "snmp.timeout" : 2 }' "$snmp_ip" "$snmp_cred" "$snmp_cred" > "$json_file"

通常,一旦尝试生成动态JSON,就必须担心参数值被正确编码。在这种情况下,您可能需要考虑使用像jq这样的工具来生成JSON,而不是手动构建它。

代码语言:javascript
复制
jq -n --arg ipr "$ip_range" --arg cred "$snmp_cred" '{ 
  "ip_range" : $ipr,
  "types" : [ "snmp" ],
  "description" : $cred,
  "snmp.version": "v2c",
  "snmp.port" : 161,
  "snmp.community" : $cred,
  "snmp.retries" : 3,
  "snmp.timeout" : 2 }' > "$json_file"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40152515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档