bash는 새 줄을 추가하는 동안 루프를 중지해야 합니다.

bash는 새 줄을 추가하는 동안 루프를 중지해야 합니다.

저는 지난 이틀 동안 이 문제를 해결하기 위해 노력해 왔으며 조언이 필요합니다. 내가 가지고 있는 모든 장치의 모든 드라이브를 확인하기 위한 범용 스크립트를 만들고 있습니다. 내가 알아낼 수 없는 유일한 문제는 for 루프에서 실행할 때 텍스트 파일의 메가레이드 줄이 한 줄에서 3x 줄로 변경된다는 것입니다(아래 예). 지금은 많은 시간을 보냈으며 방법에 대한 조언이 있습니다. "bus -d disk" 형식을 분할하는 것을 방지하고 한 줄에 유지하는 것이 좋습니다.

(일반 고양이에서 stdout을 생성하고 실행할 때 한 줄)

$ sudo smartctl --scan |grep megaraid |awk '{print $1,$2,$3}' > megadrives; cat megadrives 
/dev/bus/0 -d megaraid,0
/dev/bus/0 -d megaraid,1
/dev/bus/0 -d megaraid,2
/dev/bus/0 -d megaraid,3

(for 루프 내에서 실행하는 경우 각 행을 3개의 새 행으로 분할합니다.)

$ for i in $(cat megadrives); do echo $i; done
/dev/bus/0
-d
megaraid,0
/dev/bus/0
-d
megaraid,1
/dev/bus/0
-d
megaraid,2
/dev/bus/0
-d

답변1

행 읽기는 일반적으로 다음과 같이 수행됩니다.

while IFS= read -r line; do
    echo "$line"
done <inputfile

그런데

당신은 교체할 수 있습니다

: > megadrives; cat megadrives

그리고

: | tee megadrives

답변2

사실 제가 틀린 답을 찾고 있었는데 찾았네요. 공백이 있으면 줄 바꿈이 발생합니다.

IFS=$'\n' # 개행 문자를 $(cat ./file_wget_med)에서 j에 대한 유일한 구분자로 만듭니다 do echo "$j" done

문제 해결 방법: https://askubuntu.com/questions/344407/how-to-read-complete-line-in-for-loop-with-spaces

관련 정보