type -t type
을 실행하는 데 popen
을 사용하면 오류 메시지 -t
을 찾을 수 없습니다. 셸에서 type -t type
을 수행하면 이 내게이됩니다. 이 기능이 popen
과 함께 작동하지 않는 이유는 무엇입니까?linux에서 -t 명령 사용 c.?
답변
POSIX는 popen
과 함께 사용되는 쉘을 /bin/sh
으로 지정합니다. 대화 형 쉘은 아마도 bash
일 것입니다. type
명령의 동작은 sh
과 bash
에 따라 다릅니다. sh
은 -t
을 지원하지 않습니다.
시스템에 /bin/dash
으로 심볼릭 링크 된 /bin/sh
이있을 수 있지만 이는 구현 세부 사항입니다.
당신이 bash
동작을해야하는 경우
bash
을 실행
popen("/bin/bash -c 'type -t type'", "r")
Live demo합니다.
대화 형 쉘은 bash입니다. Ok -t는 설명하는 sh에서 지원되지 않습니다. 답변 주셔서 감사합니다. 해결 방법이 있습니까? 거기에 내장 된 명령과 파일이 프로그램이라면 그 결과를 내게주는 또 다른 명령이 있습니까? – Ellebasi
환상적입니다. :-) 어떻게 popen ("/ bin/bash -c 'type -t type'", "r")의 출력 (builtin, file)을 if 문에 사용할 수 있습니까? – Ellebasi
나는 출력에 builtin과 file 대신에 ultin과 ile을 넣었다. 이 문제를 어떻게 해결할 수 있습니까? – Ellebasi
작성한 코드가 표시 될 수 있습니까? 그리고 그것은 컴파일러 오류 메시지 또는 런타임 오류입니까? – UnholySheep
FILE * file = popen ("type -t type", "w"); 이 오류는 런타임에 표준 출력에 나타납니다. 쉘에서 직접 타입 -t 타입을 사용할 때 내장 타입을 사용합니다. (오류 없음) – Ellebasi