echo -e는 bash에서 파일로 리디렉션할 때 파일의 결과를 올바르게 출력하지 않습니다.

echo -e는 bash에서 파일로 리디렉션할 때 파일의 결과를 올바르게 출력하지 않습니다.

스위치의 포트 정보를 가져오는 스크립트를 실행 중입니다. 동일한 명령이 실행되는 것을 보는 대신 파일의 출력을 가져와야 합니다. 파일에서 포트를 잘 읽습니다. 파일로 리디렉션하지 않으면 올바른 정보를 얻을 수 있지만 파일로 리디렉션하면 스위치에서 실행되는 동일한 명령만 볼 수 있습니다. lldp-list.txt는 포트 정보(예: 3개 포트)가 포함된 텍스트 파일입니다.

무엇이 잘못될 수 있나요? 나는 "티"와 "`"를 시도했지만 성공하지 못했습니다. 뭔가 빠졌어

이 줄에서는 정상적으로 출력됩니다.

  • echo -e "lldp 인접 정보 표시 $ports | inc 섀시 설명"

산출:

  • 이웃 섀시 - 설명: ArubaOS(모델: 205)
  • 이웃 섀시 - 설명: ArubaOS(모델: 225)
  • 이웃 섀시 - 설명: ArubaOS(모델: 325)

하지만 리디렉션하면 "output.txt" 파일에 다음 결과가 표시됩니다.

echo -e "show lldp neighbor-info $ports | inc Chassis-Desc" >> output.txt

show lldp neighbor-info 1/1/1 | inc Chassis-Desc
show lldp neighbor-info 1/1/5 | inc Chassis-Desc
show lldp neighbor-info 1/1/6 | inc Chassis-Desc

코드는 다음과 같습니다.

while IFS= read -r ports; do
echo -e "show lldp neighbor-info $ports | inc Chassis-Desc" >> output.txt
sleep 2
done < lldp-list.txt

예, 따옴표가 필요합니다. 이것은 텔넷 세션을 통해 스위치에서 실행하는 명령입니다. ""가 없으면 스크립트는 오류를 반환합니다. 이것이 제가 echo -e ...그것을 사용하는 이유입니다. bash 스크립트의 텔넷 세션을 통해 해당 명령줄을 스위치로 보냅니다.

해결 방법으로 세션 라인 끝에 tee와 telnet을 사용했습니다.

telnet $MRV_HOST $MRV_PORT | tee output.txt

출력 파일을 더 많이 분석해야 합니다. 하지만 나는 여전히 내가 보는 문제에 대한 해결책이 있어야 한다고 믿습니다...

답변1

echo명령을 문자열로 해석한 다음 출력합니다 . 설명을 보면 명령을 실행하고 결과를 출력하려는 ​​것 같습니다.

이 시도:

while IFS= read -r ports; do
echo -e $(show lldp neighbor-info $ports | inc Chassis-Desc) >> output.txt
sleep 2
done < lldp-list.txt

$()쉘의 장점을 활용하기 위해 따옴표가 변경되었습니다.명령 대체이제 echo명령 문자열 대신 명령 결과가 출력됩니다.

이 경우 실제로 또는 명령 대체가 필요하지 않으며 echo스크립트를 다음과 같이 변경할 수 있습니다.

while IFS= read -r ports; do
show lldp neighbor-info $ports | inc Chassis-Desc >> output.txt
sleep 2
done < lldp-list.txt

관련 정보