Bash:从主机列表中读取,在添加内容时创建/触摸文件

时间:2018-01-08 16:15:12

标签: linux bash

希望从具有主机名ip的主机列表中读取。想为主机名创建一个文件并将ip添加到其中。这是针对ansible host_var文件的。

HOSTS="\
10.10.10.1,host1 \
10.10.10.2,host2 \
10.10.10.3,host3 \
"

cmd() {
  touch /tmp/test/$HOST
}

for j in $HOSTS; do
  IP='echo $j | cut -d: -f1'
  export HOST='echo $j | cut -d: -f2'
  cmd echo "ansible_host: $IP" > $HOST
done

更简单的版本..

HOSTS="10.10.10.1,host1
10.10.10.2,host2
10.10.10.3,host3"

while IFS="," read -ra line; do
  echo "ansible_host: '${line[0]}'" > "${line[1]}"
done <<< "$HOSTS"

虽然我省略了400个主机。我在这两个.sh脚本上遇到的错误都在回显线上。

./ touchfile.sh:line 425:找不到echo:命令 ./touchfile.sh:line 425:echo:未找到命令

对于我做错什么的任何帮助?

1 个答案:

答案 0 :(得分:1)

不要将值存储在变量中;使用这里的文件。此外,不需要阵列;只需为每个字段分别提供read个名称。

while IFS=, read -r addr name; do
    printf "ansible_host: '%s'\n" "$addr" >> "$name"
done <<EOF
10.10.10.1,host1
10.10.10.2,host2
10.10.10.3,host3
EOF