2013-04-16 4 views
0

Почему дополнительная строка «Line» внутри echo "Line $line" не добавляется ко всем файлам внутри цикла for?
Bash: Форматирование результатов внутри цикла for из команды ls

#!/bin/bash 

INPUT=targets.csv 
IFS="," 

[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; } 
while read target user password path 
do 
    result=$(sshpass -p "$password" ssh -n "$user"@"$target" ls "$path"*file* 2>/dev/null) 

    if [ $? -ne 0 ] 
    then 
      echo "No Heap dumps detected." 
    else 
      echo "Found a Heap dump! Possible OOM issue detected" 
      for line in $result 
      do 
        echo "Line $line" 
      done 
    fi 

done < $INPUT 

содержимое файла .csv ..

[email protected]:~/scripts$ cat targets.csv 
server.com,root,passw0rd,/root/ 

скрипт вывода ..

[email protected]:~/scripts$ ./checkForHeapdump.sh 
Found a Heap dump! Possible OOM issue detected 
Line file1.txt 
file2.txt 

ответ

0

Оператор:

for line in $result 

выполняет разбиение слов на $result, чтобы получить е ach, который должен быть установлен в $line. Разделение слов использует разделители в $IFS. Раньше в скрипте вы устанавливали это только ,. Таким образом, этот цикл будет перебирать данные, разделенные запятыми, в $result. Поскольку в нем нет никаких запятых, это всего лишь один элемент.

Если вы хотите, чтобы разделить его на линии, сделайте следующее:

IFS=" 
" 
for line in $result 
+0

хороший один Barmar! – bobbyrne01

Смежные вопросы