수업 과제의 일부로 나만의 명령 셸을 만들어야 합니다. 셸에서는 &&
및 같은 논리 연산자를 포함하여 다양한 명령줄 인수를 허용하도록 해야 합니다 ||
. 나는 처음에 첫 번째 명령이 실행되면 두 번째 명령이 execvp()를 호출하여 모든 작업을 수행하도록 하려는 경우에만 논리적으로 실행되도록 쉘을 프로그래밍해야 한다고 가정했습니다. 그러나 execp()에 대한 두 번째 매개변수는 아마도 &&
커넥터를 설명하므로 간단히 매개변수로 전달할 수 있다는 것을 깨달았습니다. 입력하면 execvp("./shell", "echo hello && mkdir testing")
논리 연산자가 고려됩니까 &&
?
답변1
이러한 exec*()
호출은 단순히 프로그램을 시작하고 명령줄 인수를 전달합니다. 기본 시스템 호출은 인수가 무엇을 의미하는지 전혀 모릅니다. 이는 시작된 프로세스에 따라 다릅니다.
exec*()
POSIX 호환 쉘을 실행하고 여기에 명령줄을 전달할 수 있습니다(예 execl("/bin/sh", "/bin/sh", "-c", "echo hello && mkdir testing", (char *) NULL)
: 를 사용하여 mkdir
쉘은 성공할 경우에만 명령을 실행합니다) echo
.
하지만 당신의 임무는구현하다쉘과 &&
운영자 자체는 이미 존재하는 외부 쉘을 호출하여 작업을 수행하는 것은 실제로 작업의 정신에 없는 것 같습니다. C 코드 한 줄을 작성할 필요 없이 기존 셸을 사용하여 시작할 수 있습니다.