이것은 내 쉘 스크립트입니다
#!/bin/bash
echo "Content-type: text/plain"
echo ""
sshpass -p $pass ssh -v -p $port -t -o StrictHostKeyChecking=no root@$ip "cd / && ls && exit"
네트워크나 명령줄을 통해 실행할 수 있습니다.
명령줄을 통해 실행하면 "-v"(상세 모드) 등의 디버그 정보를 포함하여 많은 출력이 표시됩니다.
그러나 네트워크를 통해 실행될 때 내가 보는 것은 폴더 목록(실행된 명령의 출력)뿐입니다. 다른 데이터는 없습니다.
네트워크를 통해 이 스크립트를 실행할 때 확장 데이터가 손실되는 이유는 무엇입니까? 명령줄을 통해 실행할 때 왜 거기에 있습니까?
네트워크를 통해 실행될 때에도 존재하는지 어떻게 확인할 수 있나요?
답변1
귀하의 스크립트는 표준 출력이 아닌 표준 오류로 "추가 데이터"를 보내고 있습니다.
네트워크를 통해 이 스크립트를 실행할 때 확장 데이터가 손실되는 이유는 무엇입니까?
seb 서버와 스크립트 사이에 사용되는 CGI 인터페이스는 스크립트의 표준만을 사용하기 때문에산출기준이 아닌 흐름을 생각하세요실수개울. 기준실수다른 곳에 있을 수도 있습니다. 네트워크 서버의 오류 로그일 수도 있고 아무 곳에도 없을 수도 있습니다.
명령줄을 통해 실행할 때 왜 거기에 있습니까?
터미널에서 표준 출력과 표준 오류는 기본적으로 터미널 자체와 동일한 위치에 있기 때문입니다.
네트워크를 통해 실행될 때에도 존재하는지 어떻게 확인할 수 있나요?
표준 오류를 표준 출력과 동일한 위치로 리디렉션할 수 있습니다.
exec 2>&1
(파일 설명자 2는 표준 오류이고 파일 설명자 1은 표준 출력입니다.)