【问题标题】:Store output from my bash script in a .txt file将我的 bash 脚本的输出存储在 .txt 文件中
【发布时间】:2021-05-01 00:32:18
【问题描述】:

我想将脚本的输出存储在一个文件中,但不能。

这是:

#!/bin/bash

if [ "$1" == "" ]
then
echo "Te falta especificar una dirección ip"
echo "Syntax esperado: ./hostDiscovery.sh <ip>"

else
for ip in `seq 1 254`; do
ping -c 1 $1.$ip | grep "64 bytes" | cut -d " " -f 4 | tr -d ":" | tee ip.txt &
done
fi

问题是创建的文件没有数据。它是空白的。

【问题讨论】:

  • 这个脚本是我正在做的关于 bash 脚本的课程的一部分,它是 Nmap 的一个变体,效率不高。

标签: linux bash shell scripting


【解决方案1】:

要快速回答您的问题,只需将最后一个管道 ... -d ":" | tee ip.txt &amp; 替换为 ... -d ":" &gt;&gt; ip.txt &amp;

  • &gt;&gt; 语法将附加到 ip.txt。您也可以使用tee -a 追加,但这也会打印到标准输出。
  • 如果您想确保每次运行脚本时都清除该文件,您需要:&gt; ip.txt 在脚本顶部清除 ip.txt

您的新脚本可能如下所示:

#!/bin/bash

if [ "$1" == "" ]; then
    echo "Te falta especificar una dirección ip"
    echo "Syntax esperado: ./hostDiscovery.sh <ip>"
else
    > ip.txt
    for ip in `seq 1 254`; do
        ping -c 1 $1.$ip | grep "64 bytes" | cut -d " " -f 4 | tr -d ":" | tee -a ip.txt &
    done
fi

不过,我对这个脚本有很多话要说。看起来您正在尝试对某个范围内的所有 IP 地址进行 ping 操作以测试它们是否处于运行状态/活动状态。你可能想看看nmap

例如nmap -sP 192.168.1.1-254

【讨论】:

  • 感谢您的回复。是的,我也尝试过使用 >>,但我遇到了“错误”。剩下的文件会保存信息,但如果我再次使用脚本,新信息会添加到文件中,这是我不想要的。我希望每次使用脚本时都会覆盖该文件。
  • 非常好的评论,我明白你为什么想要这个。要清除文件的内容,只需在脚本顶部执行&gt; filename.txt。我将更改我的答案以显示这一点。
【解决方案2】:

您在每次调用 tee 时都会覆盖 ip.txt。

尝试调用 tee -a 来追加。

了解详情

【讨论】:

  • 也感谢您的回复。与上面相同“如果我再次使用脚本,新信息将添加到文件中,这是我不想要的。我希望每次使用脚本时都会覆盖该文件。”
  • 您仍然需要 tee -a,只需在脚本开头截断文件即可。 echo "" > ip.txt 在循环开始之前会给你我认为你想要的最终结果。
  • 我会补充一点,虽然我认为 tee -a 是对您提出的问题的最佳答案,但最好将文件写入完全从脚本中提取出来,而不是像这样称呼它./myscript.sh > ip.txt 或 ./myscript.sh | tee ip.txt 得到你想要的结果。
猜你喜欢
  • 2021-01-16
  • 2021-07-04
  • 1970-01-01
  • 1970-01-01
  • 2020-03-22
  • 2017-04-07
  • 1970-01-01
  • 2014-11-03
  • 2012-04-03
相关资源
最近更新 更多