쉘 간섭을 피하기 위해 명령을 실행하는 방법

쉘 간섭을 피하기 위해 명령을 실행하는 방법

때로는 쉘 내장 기능과 다른 파일/패키지에서 동일한 명령이 제공되는 경우도 있습니다. 예:

$ 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셸의 간섭을 피할 수 있습니다 .

관련 정보