shell - 运行 traceroute 和 traceroute6 的最短 shell 代码
问题描述
我想在 shell 脚本中依次运行traceroute -w2
和traceroute6 -w2
来尝试多个不同的主机。
一种天真的方法可能只是使用一个临时变量来收集其中的所有主机(例如,设置HOSTS
为ordns.he.net one.one.one.one google-public-dns-a.google.com
),然后将其单独通过管道传递给每个命令,例如echo $HOSTS | xargs -n1 traceroute -w2
等,但这在tcsh
与 in 中的工作方式不同bash
,并且可能很容易如果您想添加更多命令(因为您会将这些命令添加为代码而不是要做的事情列表),我认为有一些更好的方法可以将命令列表连接在一起(例如,a带有单个参数的命令名称)和参数列表(例如,我们示例中的主机名),以便 shell 执行每个可能的组合。
我尝试过将xargs -n1
(对于主机)和xargs -n2
(对于带有一个参数的命令)管道进行某种组合,但这并没有多大意义,也没有奏效。
我正在寻找一种不使用任何 GNU 工具并且可以在基本 OpenBSD 安装中工作的解决方案(如有必要,perl
它是基本 OpenBSD 的一部分,因此它也可用)。
解决方案
保持简单:
#!/bin/sh
set -- host1 host2 host3 host4 ...
for host do traceroute -w2 -- "$host"; done
for host do traceroute6 -w2 -- "$host"; done
推荐阅读
- uitableview - 插入行后有没有办法显示键盘?
- python - Shouldn't my try/except block have caught this AttributeError?
- android - 如何使用 RecyclerView 和 Android Studio 中的按钮将项目添加到列表并因此删除它们?
- java - 将 .txt 文件中的所有单词添加到自定义对象的 ArrayList
- typescript - 并行运行一组 TaskEithers,但如果 1 个或多个任务失败则继续
- c# - 需要帮助手动添加到字典
- testing - 多个 if 语句的圈复杂度
- python - 如何抓取一个网站的所有首页文字内容?
- github - 为特定元素重新加载 SwiftUI 视图
- python - GCP DLP(数据丢失预防)得到“解密失败:密文无效。”