2013-01-19 1 views
0

빌드 프로세스의 일부로 hdiutil을 사용하여 DMG를 마운트하려고합니다.bash 쉘 대신 GUI에서 실행할 때 파이핑이 bash 스크립트 내에서 작동하지 않습니다.

이 작업을 수행하기 위해 쉘 스크립트를 작성했으며, 열기 전에 hdiutil이 사용권 계약서를 확인하기 때문에 yes | hdiutil ...과 같은 스크립트가 있습니다. Terminal.app와 같은 bash 쉘에서 스크립트를 실행할 때 문제가 없으며 프로세스가 예상대로 작동합니다.

그러나 Xcode에 '외부 빌드 시스템'타겟을 추가하고/bin/bash에서 스크립트를 실행하면 hdiutil 명령을 실행 한 후 영원히 정지됩니다.

나는 yes이 종료 중이 아닌 것으로 짐작하고 있습니다. 대화 형 bash 셸이 아닌 GUI 응용 프로그램에서 스크립트를 호출 할 때이 동작을 다르게하는 원인은 무엇입니까? 두 방법을 모두 사용하여 작동하게하려면 어떻게해야합니까?

+0

'yes'는'SIGPIPE'를 받았을 때 죽어야합니다. 나는 이것을 시험 할 방법이 없다. 일부 (어리석은) 프로그램은'/ dev/tty'에서 직접 읽거나 stdin을 우회하여 스스로를 어렵게하기로 결정합니다. 'lsof' 또는 시스템에서 사용할 수있는 시스템 호출 추적 프로그램을 사용하여 실제로 읽는 위치를 확인하십시오. 그게 문제라면,'expect' 나 Python의'pty.spawn()'과 같은 pty에 연결할 수있는 다른 언어를 사용해야 만합니다. – ormaaj

+0

확실하게'echo y | hdiutil'? 왜 이것이 반복적으로되기를 바랄까요? – trojanfoe

+0

예,'echo y | hdiutil'은 잘 작동합니다. 응답으로 귀하의 의견을 반복하고 그것을 받아 들일 것입니다. –

답변

0

echo y | hdiutil은 @trojanfoe가 제안한대로 yes | hdiutil이 필요합니다.

관련 문제