2011-01-22 2 views
3

필자는 bash에서 사소한 일을하고 싶지만 어디서나 외부 의존성이없는 바이너리를 원한다. 그래서 에는 C가 내부에서 물건처럼 bash 할 수있는 자체 포함 된 lib (즉, 시스템() 주위의 래퍼가 아닌)를 작성한 사람이 있습니까? cp, rm, wget, tftp, ar, tar, guzip 어쩌면 dpkg하지만 난 그 하나의 단계를 좌우 할 수 있다고 생각 :Bash를 C 라이브러리로 사용 하시겠습니까?

손 끄기, 내가 필요로 할 것으로 예상 것들이다.


는 의견에 응답하려면 : 나는 정적으로 링크 바쁜 박스의 라인하지만 난 그것을 위해 프로그램 곳으로 쉘 파일이 필요하지 않는 물건 내가 안 따라 뭔가를 찾고 있어요 자동으로 사용하면 연결되지 않습니다.

+1

대부분이 bash의 외부 종속성입니다. lib에이 실행 파일이 모두 포함 된 단일 라이브러리를 원하십니까? –

+1

'system ("cp ...")'을 호출하지 않는 이유는 무엇입니까? (나는 당신이 리눅스에 있다고 가정하고 있지만 이것은 Windows에서 완전히 다른 질문입니다 ...) – Mehrdad

+0

왜 system()을 사용할 수 없습니까? 이들 모두는 외부 실행 파일이므로 "bash를 C 라이브러리로"사용하는 것이 영속성을 유지하는 데 도움이되지 않습니다. –

답변

6

busybox이 필요합니다.

+0

나는 그걸로 살 수는 있지만 오히려하지 않을 것이다. 내 편집을 참조하십시오. – BCS

2

나는 완전히 Busybox에 동의합니다. 또한 dpkg 소스 코드를 얻으면 대부분의 기능에 액세스 할 수있는 find a small library inside이됩니다.

1

사용자 정의 요구 사항이 많으며 "사용하지 않는 것들은 연결되어 있지 않습니다"라고 원하지 않으므로 수행해야합니다. 손 해킹이 많다.

는 오브젝트 파일에 모든 외부 종속성을 컴파일하는 경우, 자신의 도구로 그들을 링크 할 수 있어야한다 (네임 스페이스 충돌을 가정하지, 당신이 조심 있다면 나쁘지 큰 가정, 아니지만) 자신의 main() 기능을 그냥 소비하면 할 수 있습니다.

사실, 의존성에 대해서는 아마도 main()의 이름을 바꾸고 명령 줄에서 직접 호출하거나 argc/argv를 패킹하여 사용할 수있는 도구를 사용할 수 있습니다. 개별 기능을 직접 호출하는 것이 아니라 오버 헤드가있을 수 있습니다.

전술 busybox은 이미 dpkg을 제외하고 (심지어 tarwget)를 필요로하는 모든 기능을 제공하며, 이미위한 lib 디렉토리가 이후, 나는 당신이 당신의 방법에 잘있다 말할 것입니다.

+0

나는 누군가가 이미 당신이 방금 설명한 내용을 더 많이 또는 덜 정확하게 수행 한 다음 lib로 그것을 포장하기를 바랬다. – BCS

관련 문제