如何使用数组元素的参数执行 bash 命令?
How to execute a bash command with arguments from array elements?
我正在 Linux 上编写一个简单的 bash 脚本来 ping 一些主机,例如:
ping -c 1 google.com
ping -c 1 amazon.com
...
在我的方法中,我将主机从一个单独的文件加载到一个数组中,然后遍历元素。使用数组中的元素调用 ping 命令时会出现问题。执行以下脚本会给我一条错误消息。
#!/bin/bash
IFS=$'\n' read -d '' -r hosts < hostnames.txt
for host in "${hosts[@]}"
do
ping -c 1 ${host}
done
我猜语法有问题,但我还没弄清楚。
您的 hostnames.txt
是在 Windows 机器上生成的?
您的主机名有尾随 \r
个字符,因此查找失败。
试试这个:
cp hostnames.txt hostnames.txt.bkp
dos2unix hostnames.txt.bkp hostnames.txt
然后再次 运行 您的脚本。
如果您没有安装 dos2unix
并且不想安装它...也许您已经安装了 tr
。在那种情况下,这也应该可以解决问题:
tr -d '\r' < hostnames.txt.bkp > hostnames.txt
我正在 Linux 上编写一个简单的 bash 脚本来 ping 一些主机,例如:
ping -c 1 google.com
ping -c 1 amazon.com
...
在我的方法中,我将主机从一个单独的文件加载到一个数组中,然后遍历元素。使用数组中的元素调用 ping 命令时会出现问题。执行以下脚本会给我一条错误消息。
#!/bin/bash
IFS=$'\n' read -d '' -r hosts < hostnames.txt
for host in "${hosts[@]}"
do
ping -c 1 ${host}
done
我猜语法有问题,但我还没弄清楚。
您的 hostnames.txt
是在 Windows 机器上生成的?
您的主机名有尾随 \r
个字符,因此查找失败。
试试这个:
cp hostnames.txt hostnames.txt.bkp
dos2unix hostnames.txt.bkp hostnames.txt
然后再次 运行 您的脚本。
如果您没有安装 dos2unix
并且不想安装它...也许您已经安装了 tr
。在那种情况下,这也应该可以解决问题:
tr -d '\r' < hostnames.txt.bkp > hostnames.txt