사용자 정의 셸의 명령줄 매개변수와 따옴표 사용의 효과 이해

사용자 정의 셸의 명령줄 매개변수와 따옴표 사용의 효과 이해

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 쉘은 따옴표를 사용하며 인수가 ' 또는 "로 묶여 있는지 여부에 따라 쉘이 인수를 삽입합니다.스택 오버플로 스레드보다 자세한 설명이 제공됩니다.

관련 정보