2016-09-22 6 views
0

type -t type을 실행하는 데 popen을 사용하면 오류 메시지 -t을 찾을 수 없습니다. 셸에서 type -t type을 수행하면 이 내게이됩니다. 이 기능이 popen과 함께 작동하지 않는 이유는 무엇입니까?linux에서 -t 명령 사용 c.?

+0

작성한 코드가 표시 될 수 있습니까? 그리고 그것은 컴파일러 오류 메시지 또는 런타임 오류입니까? – UnholySheep

+0

FILE * file = popen ("type -t type", "w"); 이 오류는 런타임에 표준 출력에 나타납니다. 쉘에서 직접 타입 -t 타입을 사용할 때 내장 타입을 사용합니다. (오류 없음) – Ellebasi

답변

0

POSIX는 popen과 함께 사용되는 쉘을 /bin/sh으로 지정합니다. 대화 형 쉘은 아마도 bash 일 것입니다. type 명령의 동작은 shbash에 따라 다릅니다. sh-t을 지원하지 않습니다.

시스템에 /bin/dash으로 심볼릭 링크 된 /bin/sh이있을 수 있지만 이는 구현 세부 사항입니다.

당신이 bash 동작을해야하는 경우

는 명시 적으로 bash을 실행

popen("/bin/bash -c 'type -t type'", "r") 

Live demo합니다.

+0

대화 형 쉘은 bash입니다. Ok -t는 설명하는 sh에서 지원되지 않습니다. 답변 주셔서 감사합니다. 해결 방법이 있습니까? 거기에 내장 된 명령과 파일이 프로그램이라면 그 결과를 내게주는 또 다른 명령이 있습니까? – Ellebasi

+0

환상적입니다. :-) 어떻게 popen ("/ bin/bash -c 'type -t type'", "r")의 출력 (builtin, file)을 if 문에 사용할 수 있습니까? – Ellebasi

+0

나는 출력에 builtin과 file 대신에 ultin과 ile을 넣었다. 이 문제를 어떻게 해결할 수 있습니까? – Ellebasi