-1

.csv ファイルに 2 つのエントリ (行) があるにもかかわらず、この while ループが 1 回しか実行されないのはなぜですか?
また、式に一致するファイル/ディレクトリがない場合、文字列 'ls: /root/ heapdump : No such file or directory' がコンソールにも出力されるのはなぜですか?

#!/bin/bash

INPUT=targets.csv

[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; }
while IFS=, read target user password path
do
    result=$(sshpass -p "$password" ssh "$user"@"$target" ls "$path"*heapdump*)

    if [ $? -ne 0 ]
    then
            echo "No Heap dumps detected."
    else
            echo "Found a Heap dump! Possible OOM issue detected"
    fi

done < $INPUT

.csv コンテンツ ..

rob@laptop:~/scripts$ cat targets.csv 
server.com,root,passw0rd,/root/
server.com,root,passw0rd,/root/

出力 ..

rob@laptop:~/scripts$ ./checkForHeapdump.sh 
ls: /root/*heapdump*: No such file or directory
No Heap dumps detected.
4

2 に答える 2

0

sshstdin から読み取っているため、最初の反復中に残りの CSV ファイルを丸呑みしています。への変更:

result=$(sshpass -p "$password" ssh -n "$user"@"$target" ls "$path"*heapdump*)

このオプションは、stdin を に-nリダイレクトします。ssh/dev/null

エラーメッセージに関しては、次の場合の通常のエラー出力です。

ls filename-or-wildcard

一致するものはありません。それを見たくない場合は、stderr をリダイレクトします。

result=$(sshpass -p "$password" ssh -n "$user"@"$target" ls "$path"*heapdump* 2>/dev/null)
于 2013-04-16T00:03:06.760 に答える