![현재 스크립트의 출력을 소켓으로 리디렉션](https://linux55.com/image/214208/%ED%98%84%EC%9E%AC%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%EC%86%8C%EC%BC%93%EC%9C%BC%EB%A1%9C%20%EB%A6%AC%EB%94%94%EB%A0%89%EC%85%98.png)
원격 서버에서 실행되는 셸 스크립트를 디버깅하려고 하는데 스크립트의 표준 출력에 액세스할 수 없습니다. 소켓을 통과하도록 출력을 리디렉션할 수 있나요?
답변1
출력을 fifo로 리디렉션하고 fifo를 입력으로 사용하여 이를 달성할 수 있었습니다 nc
.
#/bin/sh -e
# create a fifo
unlink /tmp/f
mkfifo /tmp/f
# connect to the server in the background
nc localhost 4444 < /tmp/f &
# redirect stdout to the fifo
exec > /tmp/f
# an example that writes to stdout
while true; do
sleep 1
echo "hello world"
done
이는 표준 출력을 소켓에 연결하여 exec 2> /tmp/f
stderr을 포함하도록 추가할 수 있다는 점에 유의하십시오. stdin 연결에 성공하지 못했지만 가능해야 합니다.
(이 스크립트의 이전 버전이 대체되었습니다 nc
. exec
이는 Zsh에서는 작동하지만 BusyBox의 셸인 ash에서는 작동하지 않습니다.)