2012-09-03 2 views
2

popen() 매뉴얼 페이지에 따르면 나는/bin/sh ...을 여는 중입니다./bin/bash 쉘을 열고 BASH 쉘 스크립트와 상호 작용하도록이 동작을 오버로드 할 수있는 방법이 있습니까? 아니면 pty 스타일 연결을 열어야합니까?popen() 스트림에서 bash를 열 수 있습니까?

+0

대부분의 리눅스 시스템에서'/ bin/sh'는'/ bin/bash'와 심볼릭 링크되어 있습니다. –

+1

? 어쩌면 우분투는 아니지만. –

+0

@JoachimPileborg 예.하지만 'sh'로 호출하면 다른 행동을합니다. – hamstergene

답변

0

가 아마 가장 간단한 차례로과 같이 당신의 bash는 스크립트를 호출하는 작은 쉬 스크립트하는 것입니다 :

#!/bin/sh 

exec bash yourscript.sh "[email protected]" 

을 아니면는 popen 포기와 포크 자신의는 popen을 구현할 수 있습니다()와 execl 함수().

+0

별도의 sh 스크립트는 쓸모가 없습니다. bash 스크립트에서'popen'을 직접 호출 할 수도 있습니다. – Gilles

+0

쓸데없는 생각, 나는 약간 생각한다. 혼란 스럽네요.하지만 효과가 있습니다. 귀하의 답변, +1. 그리고 편집 해 주셔서 감사합니다. –

2

popen에 전달하는 스 니펫에서 bash 구문을 사용하려면 sh에서 bash를 명시 적으로 호출 할 수 있습니다. 당신이 bash는 조각 안쪽에 작은 따옴표가 필요하면

f = popen("exec bash -c 'shopt -s dotglob; cat -- *'", "r"); 

, '\''로 전달합니다. 다른 모든 문자는 문자 그대로 전달됩니다.

실행하려는 기존 bash 스크립트가있는 경우 스크립트 나 다른 프로그램과 동일하게 경로를 지정하기 만하면됩니다. 스크립트가 실행 가능하고 #!/usr/bin/env bash 또는 #!/bin/bash으로 시작하는지 확인하십시오. 당신이 비 실행 될 수있는 스크립트가있는 경우 (때문에 Windows 이동성 제약의 예를 들어), 명시 적으로 떠들썩한 파티를 호출 할 수 있습니다 :

f = popen("exec bash myscript.bash", "r"); 

또는 원하는 프로그램을 호출 사용자 정의 popen -like 함수를 작성 (하지만 더 간단한 솔루션만으로는 만족스럽지 않을 때만 가능합니다. 예 : popen() alternative.

+0

그게 내가 알아야 할 것입니다. 감사!!! 또한 예제 링크의 링크를 통해 GLIB에있는 프로세스를 작성하기위한 자켓으로 안내합니다. 이게 내가 필요한 것 같아. –

관련 문제