쉘 없이 명령을 실행할 수 있나요?

쉘 없이 명령을 실행할 수 있나요?

프로그램을 실행하고 출력을 텍스트 필드로 반환하는 이진 실행 프로그램 명령을 개발 중입니다.

명령의 매개변수에는 명령 자체(명령줄에 입력됨)와 디렉터리가 포함됩니다. 따라서 작업을 수행하는 루틴은 먼저 디렉터리로 전환한 다음 명령을 실행합니다.

some.cmd예를 들어, 디렉토리에서 명령을 실행하려는 경우 /home/user매개변수는 command = 'some.cmd'및 입니다 directory = '/home/user'.

나는 이것이 some.cmd작동하지 않는다는 것을 알았지만 명령을 이것으로 변경하면 /home/user/some.cmd작동했습니다. 그러나 명령은 ls -l작동합니다. 또한 cd명령이 인식되지 않는 것으로 나타났습니다. sshsetup 명령을 통해 원격으로 실행 하면 ssh user@localhost 'cd /home/user && ./some.cmd'작동합니다.

셸에서 명령을 실행할 때 존재하는 일부 설정이 직접 실행할 때는 존재하지 않는 것 같은데, 실행하면 ssh작동할 수 있는 설정이 생성되는 것 같습니다.

이에 대한 설명이 있나요?

고쳐 쓰다: 몇 가지 질문 끝에 명령을 실행하는 데 사용되는 API가 셸이나 콘솔에서 제공하는 일반 환경에서는 실행되지 않는다는 것을 알게 되었습니다. 옵션과 함께 명령을 실행한 후에는 /bin/sh -c "cd ..."문제가 더 이상 존재하지 않았습니다. 이것이 나에게 주어진 환경이다 ssh user@localhost 'command ...'. 기술적인 세부 사항은 잘 모르겠지만 일반 셸에서 실행할 때 사용할 수 있는 환경이 운영 체제에서 직접 실행하는 명령에 항상 사용할 수 있는 것은 아닙니다.

답변1

파일을 실행하려고 할 때 시스템은 파일을 찾는 방법을 알아야 합니다. 그렇기 때문에 전체 경로를 지정하면 작동합니다. 셸에는 PATH실행 파일을 찾기 위해 디렉터리 목록을 저장하는 환경 변수도 있습니다. 그렇기 때문에 전체 경로를 지정할 필요가 없습니다 ls.

답변2

PATH이는 전적으로 명령이 .Windows 시스템과 달리 실행 파일의 검색 경로에 암시적으로 존재하지 않기 때문입니다 . ls예를 들어 같은 명령을 실행하려면 ls -l해당 명령이 에 있어야 하며 PATH, 사실이라는 사실을 통해 해당 명령이 또는 type ls에 있음을 알 수 있습니다 . 그러나 이는 시스템에 없으므로 명령으로 투명하게 실행할 수 없습니다. 세 가지 옵션이 떠오릅니다./bin/usr/binsome.cmdPATH

  1. 예를 들어 일부 배포판에서는 기본적으로 some.cmd에 추가 할 수 있습니다 .PATH/usr/local/bin/"$HOME"/binPATH

  2. "$HOME"당신은 당신의에 추가할 수 있습니다PATH

  3. ./some.cmd일반 경로를 사용하는 대신 (현재 디렉터리에 대한 상대 경로)를 실행할 수 있습니다.some.cmd

답변3

안녕하세요


첫 번째 방법:

Libeshell C++ Library다음을 사용하여 셸과 유사한 콘솔 응용 프로그램을 작성할 수 있습니다.

이 라이브러리를 사용하면 명령줄 및 셸 스타일 응용 프로그램을 만들 수 있습니다.


두 번째 방법:

C++를 통해 명령을 실행하려면 다음 코드를 사용하세요.

#include <stdlib.h>

int main(){

system("gnome-terminal -x sh -c 'mkdir /root/Desktop/New-Dir-1 ; mkdir /root/New-Dir-2'");
}

관련 정보