env에 env외 다른 인자 전달시 실행되는 문제. (실행 안되는게 자연스러워보임)
Closed this issue · 2 comments
no arg, no option이니 argv가 하나라도 존재하면 실행되지 않게 하는게 타당해보임.
실제로도 invalid arg나 option 전달시 동작하지 않음
no argument라는게 argument를 핸들링할 필요가 없다는 뜻이지 argument를 거부하라는 뜻은 아니기에 그렇게 해야하나 싶은데
예를 들어 subject에 export with no options라고 써있는데 그럼 export에서 어떠한 option이 들어오면 이걸 거부하고 실행되지 않게 만들어야 하나?
echo같은 경우는 -n 옵션을 처리하라고 했기 때문에 옵션 관련 로직이 좀 붙었지만 나머지 빌트인 함수에서는 bash 신경쓰지 말고 옵션이나 argument에 대한 로직이 아예 없어도 된다 생각해~~
타당하다고 생각됨.
단 42 기존 서브젝트를 고려할 때 ~란 프로그램은 ~를 인자로 받는다라고 명시된 경우 인자 타입 혹은 개수에 대한 핸들링이 평가지에 요구되기도 했음. 문제는 미니쉘의 경우 no arg, no option이라고만 명시돼 있어 다소 모호한듯.
추가로 bash manual에 builtin함수를 올바르지 않게 사용할 경우(예 pwd -x, exit a 같은 잘못된 옵션) exit status가 2라고 명시돼 있긴 함.
그렇기에 만약 bash에 맞추고자 한다면 하단에 서술된 2번 방법을 택해야함.
(여기서도 웃긴게.. pwd는 usage를 보면 옵션을 제외한 arg가 없음. 그러나 pwd arg1 arg2입력시 정상동작함.
즉 pwd는 옵션 이외의 arg에 대한 처리 로직이 아예 존재하지 않는듯.)
결론적으로 두가지 방안 중 택1 하면 될듯.
-
no arg 혹은 no option이라고 명시된 경우 관련 로직을 아예 삭제. (간단한 방법, 나도 이 방법에 동의함)
-
no option이라고 적힌경우 argv[1]이 -[문자]로 시작할경우 아예 에러처리.
(실제로 bash에 pwd -x, unset -a등 잘못된 옵션을 전달하면 에러 메시지 및 usage가 출력되면서 exit status가 2로 맞춰짐.
env는 빌트인이 아니라 env -x 같은 인자 전달시 exit status 1로 맞춰짐.)
no arg라고 명시된 것은 env단 하나. 따라서 이 경우만 arg가 있을 경우 예외처리.