C를 사용하여 사용자 정의 셸을 만들고 있으며 구문 분석, 포크 및 실행, 파이핑, 리디렉션 등을 성공적으로 수행하고 있습니다. 특정 유형의 명령이 내 쉘을 버리는 것 같습니다.
Bash 쉘에서는 다음 명령이 작동합니다.
bash> echo "abc" >> tempFile
bash> sed s/a/b/g tempFile
bash> sed 's/a/b/g' tempFile
내 사용자 정의 셸에서
mysh> sed s/a/b/g tempFile
mysh> sed 's/a/b/g' tempFile
첫 번째 sed 명령은 작동하고 두 번째 명령은 아래와 같이 실패합니다.
sed: 1: "'s/a/b/g'": invalid command code '
이것이 쉘에서 명령을 분기하고 실행하는 방법입니다.
execvp(qualifiedPath, arguments)
위 명령에서qualifiedPath "/usr/bin/sed"
및 매개변수는 문자 포인터로 끝나는 배열입니다 ( 예: NULL
첫 번째 명령의 경우 , , , 두 번째 명령의 경우 , , , ).
[0] = "sed"
[1] = "s/a/b/g"
[2] = "TEMP"
[3] = (char*)NULL
[0] = "sed"
[1] = "'s/a/b/g'"
[2] = "TEMP"
[3] = (char*)NULL
작은 따옴표로 인해 exec가 실패하고 동일한 동작이 관찰되는 이유를 아는 사람이 있습니까?
mysh> sed "s/a/b/g" tempFile
sed: 1: "'s/a/b/g'": invalid command code '
답변1
@iFreilicht와 @Andy Dalton에게 감사드립니다. 내가 얼마나 멍청했는지. Bash 쉘은 따옴표를 사용하며 인수가 ' 또는 "로 묶여 있는지 여부에 따라 쉘이 인수를 삽입합니다.스택 오버플로 스레드보다 자세한 설명이 제공됩니다.