簡體   English   中英

在bash腳本中將文本回顯到多個文件

[英]echo text to multiple files in bash script

我正在研究一個使用pssh來運行外部命令的bash腳本,然后將命令的輸出與每個服務器的IP連接起來。 pssh具有-o選項,該選項將每個服務器的文件寫入指定的目錄,但是如果命令未運行,則只有一個空文件。 我遇到的問題是使用“服務器無法訪問”之類的內容更新這些空文件,以便我知道服務器存在連接問題,並且不會導致其余腳本出現問題。

這是我到目前為止的內容:

#!/bin/bash

file="/home/user/tools/test-host"

now=$(date +"%F")
folder="./cnxhwinfo-$now/"
empty="$(find ./cnxhwinfo-$now/ -maxdepth 1 -type f -name '*' -size 0 -printf '%f%2d')"
command="echo \$(uptime | awk -F'( |,|:)+' '{d=h=m=0; if (\$7==\"min\") m=\$6; else {if (\$7~/^day/) {d=\$6;h=\$8;m=\$9} else {h=\$6;m=\$7}}} {print d+0,\"days\",h+0,\"hours\",m+0,\"minutes\"}'),  \$(hostname | awk '{print \$1}'), \$(sudo awk -F '=' 'FNR == 2 {print \$2}' /etc/connex-release/version.txt), \$(lscpu | awk -F: 'BEGIN{ORS=\", \";} NR==4 || NR==6 || NR==15 {print \$2}' | sed 's/ *//g') \$(free -k | awk  '/Mem:/{print \$2}'), \$(df -Ph | awk '/var_lib/||/root/ {print \$2,\",\"\$5,\",\"}')"

pssh -h $file -l user -t 10 -i -o /home/user/tools/cnxhwinfo-$now -x -tt $command
echo "Server Unreachable" | tee "./cnxhwinfo-$now/$empty"

ls ./cnxhwinfo-$now >> ./cnx-data-$now
cat ./cnxhwinfo-$now/* >> ./cnx-list-$now
paste -d, ./cnx-data-$now ./cnx-list-$now >>./cnx-data-"$(date +"%F").csv"

我試圖使用find來定位空文件,並使用tee將此“服務器”不可用:

echo "Server Unreachable" | tee "./cnxhwinfo-$now/$empty"

如果指定的文件夾不存在,則會出現此錯誤:

tee:./cnxhwinfo-2019-09-03/:是目錄

並且如果確實存在(即,我再次運行腳本),它會創建一個以find命令返回的IP地址命名的文件,如下所示:

192.168.1.2 192.168.1.3 192.168.1.4 1

我也嘗試過:

echo "Server Unreachable" | tee <(./cnxhwinfo-$now/$empty)

find命令將IP地址輸出在一行上,並且每行之間都有一個空格,因此我認為使用tee會很好,但是我覺得我要么遇到語法問題,要么就搞錯了方式。 我使用相同的腳本的另一個版本,它使用常規的ssh並運行良好,僅比使用pssh慢得多。

假設所有文件名中的文件名都不包含空格,則empty應該是一個數組。

readarray -t empty < <(find ...)

echo "Server unreachable" | (cd ./cnxhwinfo-$now/; tee "${empty[@]}" > /dev/null)

否則,您將通過串聯空文件名來構建單個文件名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM