때로는 쉘 내장 기능과 다른 파일/패키지에서 동일한 명령이 제공되는 경우도 있습니다. 예:
$ type -a printf kill
printf is a shell builtin
printf is /usr/bin/printf
kill is a shell builtin
kill is /bin/kill
명령을 실행할 때 가끔 어려움을 겪거나 명령이 예상대로 작동하지 않는 경우가 있습니다.
다음의 예 man kill
:
-L, --table
List signal names in a nice table.
터미널에서 시도하면 작동하지 않습니다.
$ kill -L
bash: kill: L: invalid signal specification
kill
이는 쉘 내장으로 실행되며 그러한 기능/옵션이 없기 때문입니다 .
그래서,쉘의 간섭을 피하기 위해 명령을 올바르게 실행하는 방법은 무엇입니까?
참고: 이는 kill
단지 예시일 뿐입니다. 쉘의 방해를 받는 다른 명령을 실행하는 데 어려움이 있을 수 있습니다.
답변1
당신은 그것을 사용할 수 있습니다env your-command
쉘의 간섭을 피하기 위해.
예:
$ env kill -L
1 HUP 2 INT 3 QUIT 4 ILL 5 TRAP 6 ABRT 7 BUS
8 FPE 9 KILL 10 USR1 11 SEGV 12 USR2 13 PIPE 14 ALRM
15 TERM 16 STKFLT 17 CHLD 18 CONT 19 STOP 20 TSTP 21 TTIN
22 TTOU 23 URG 24 XCPU 25 XFSZ 26 VTALRM 27 PROF 28 WINCH
29 POLL 30 PWR 31 SYS
또 다른 방법은명령 경로다음과 같이:
$ which kill
/bin/kill
$ /bin/kill -L
1 HUP 2 INT 3 QUIT 4 ILL 5 TRAP 6 ABRT 7 BUS
8 FPE 9 KILL 10 USR1 11 SEGV 12 USR2 13 PIPE 14 ALRM
15 TERM 16 STKFLT 17 CHLD 18 CONT 19 STOP 20 TSTP 21 TTIN
22 TTOU 23 URG 24 XCPU 25 XFSZ 26 VTALRM 27 PROF 28 WINCH
29 POLL 30 PWR 31 SYS
그래서,명령의 경로/위치를 사용 하거나 지정하여 env
셸의 간섭을 피할 수 있습니다 .