Bash 스크립트에 명령이 있고 해당 명령의 출력을 캡처하여 백그라운드로 보내고 싶습니다. 이 작업을 어떻게 수행합니까?
다음은 작동하지 않는 것 같습니다(계속 차단하고 아무것도 출력하지 않음).
result=`node /var/www/animekyun/node/node_modules/peerflix/app.js $torrent -r -q &`
이것은 작동하지 않는 것 같습니다. 그런데 출력은 2줄이고 변수에 배열로 저장하고 싶습니다. 이렇게 하면 스크립트의 나머지 부분에서 출력을 사용할 수 있습니다.
답변1
테스트되지 않았지만 FIFO에서 작동할 수 있습니다.
filename=/tmp/my.fifo
mkfifo $filename
node /var/.../app.js $torrent -r -q >$filename &
{ read first_line; read second_line; } <$filename
# do something with "$first_line" and "$second_line"
답변2
당신이 원하는 것은 (내가 이해하는 한) 불가능합니다. 명령 대체를 사용하여 출력을 수집할 수 없으며그 다음에백그라운드에서 프로그램을 실행합니다. 그 이유는 간단합니다. 출력은 프로세스 수명 동안 수집됩니다. 프로세스는 출력 생성을 중단한 후에도 오랫동안 지속될 수 있지만 쉘은 이를 알 수 없습니다.
출력을 파일로 리디렉션해야 하며, 출력이 완료되면(프로세스가 완료될 때까지 기다리지 않으려는 경우) 어떤 방식으로(예: 애플리케이션별) 확인해야 합니다.
node /var/www/animekyun/node/node_modules/peerflix/app.js $torrent -r -q >file &
[...]
result="$(<file)"