bash가 쉘 키워드 대신 기본적으로 바이너리 (/ usr / bin / time)를 사용하게하려면 어떻게해야합니까?
which time
Returns /usr/bin/time
type time
Returns time is a shell keyword
Running time
은 분명히 쉘 키워드를 실행합니다 :
$ time
real 0m0.000s
user 0m0.000s
sys 0m0.000s
$ /usr/bin/time
Usage: /usr/bin/time [-apvV] [-f format] [-o file] [--append] [--verbose]
[--portability] [--format=format] [--output=file] [--version]
[--quiet] [--help] command [arg...]
enable -n time
보고 bash: enable: time: not a shell builtin
답변
command
쉘 내장을 사용하여 일반 조회 프로세스를 무시하고 다른 가능성 (쉘 내장, 별명 등)에 관계없이 지정된 명령을 외부 명령으로 실행할 수 있습니다. 또이 문제는 아마 더 일반적으로 속기를 사용하지만, 시스템에서 휴대 할 필요가 스크립트에서 이루어집니다 \
(같이 \rm
보다는 command rm
또는 rm
특히 후자는 무엇인가 알 수없는 알리아스 될 수 있으므로 rm -i
).
$ time
real 0m0.000s
user 0m0.000s
sys 0m0.000s
$ command time
Usage: time [-apvV] [-f format] [-o file] [--append] [--verbose]
[--portability] [--format=format] [--output=file] [--version]
[--quiet] [--help] command [arg...]
$
다음과 같이 별칭과 함께 사용할 수 있습니다.
$ alias time='command time'
$ time
Usage: time [-apvV] [-f format] [-o file] [--append] [--verbose]
[--portability] [--format=format] [--output=file] [--version]
[--quiet] [--help] command [arg...]
$
이 방법의 장점은 바이너리에 alias time=/usr/bin/time
대한 전체 경로를 지정하지 time
않고 일반적인 경로 검색 메커니즘으로 돌아가는 것입니다.
alias
자체가 ~ / .bashrc에 또는 /etc/bash.bashrc 예에 갈 수있는 명령 (후자는 시스템의 모든 사용자에 대한 전역).
반대의 경우 (별칭이 정의 된 경우 셸 내장을 강제로 사용)의 경우 builtin time
일반적인 검색 프로세스를 다시 무시하고 명명 된 셸 내장을 실행하는과 같은 것을 사용합니다 . bash 매뉴얼 페이지는 이것 cd
이라는 함수를 사용자 정의 기능 에 제공하기 위해 종종 사용되며 , 실제로 cd
내장 함수 cd
를 사용 하여 실제 작업을 수행 한다고 언급합니다 .
답변
bash에는 경로를 지정하거나 command
다음 과 같은 다른 내장 명령을 사용하지 않고도 키워드를 회피하는 바로 가기가 있습니다 . 백 슬래시로 이스케이프 처리하십시오.
=^_^= izkata@Izein:~$ time
real 0m0.000s
user 0m0.000s
sys 0m0.000s
=^_^= izkata@Izein:~$ \time
Usage: time [-apvV] [-f format] [-o file] [--append] [--verbose]
[--portability] [--format=format] [--output=file] [--version]
[--quiet] [--help] command [arg...]
개인적으로, 나는 이것이 가능하기 때문에 더 읽기 쉽고 안전하다고 생각합니다.
=^_^= izkata@Izein:~$ alias command=echo
=^_^= izkata@Izein:~$ command time
time
답변
내장 (예 : 테스트)에 대한 일반적인 솔루션은 다음과 같습니다.
-
사용
env
(모든 껍질)$ env test external test
-
내장 기능을 비활성화하십시오 (bash와 zsh 만).
$ test 1 = 1 && echo "yes" yes $ enable -n test ### for bash. Re-enable with "enable test". $ disable test ### for zsh. Re-enable with "enable test". $ test external test
-
슬래시
/
를 사용 하여 명령 (모든 쉘)을 호출하십시오.$ test 1 = 1 && echo "yes" yes $ ~/bin/test external test
-
별명을 작성하십시오 (
shopt -s expand_aliases
사용 된 경우를 제외하고 bash 스크립트 내에서 실패 ).$ alias test='~/bin/test' ### remove with 'unalias test'. $ test external test
그러나 시간은 내장되어 있지 않습니다.
단어 time
는 “예약 된 단어”이며 명령이 아니며 내장 된 것도 아닙니다. 이를 통해이 솔루션을 사용할 수 있습니다.
-
단어를 인용하십시오. 내장 기능으로는 작동하지 않습니다.
다양한 형태의 인용 작업 :\time
"time"
'time'
ti\me
ti"me"
등$ time real 0m0.000s user 0m0.000s sys 0m0.000s $ \time Usage: /usr/bin/time [-apvV] [-f format] [-o file] [--append] [--verbose] [--portability] [--format=format] [--output=file] [--version] [--quiet] [--help] command [arg...]
별명을 무시하는 데 유용합니다.
test
별칭이 있더라도\test
PATH 명령 (또는 비활성화되지 않은 경우 내장)을 실행합니다. -
내장을 사용하십시오 (내장
command
에서는 작동하지 않음).$ command time
-
내장의 경우 위와 같이 슬래시를 사용하십시오
/
.$ /usr/bin/time
-
내장의 경우 위와 같이 별명도 작동합니다.
$ alias time='command time' $ alias time='/usr/bin/time'
[1] ~/bin/test
“외부 테스트”를 출력 하는 외부 실행 파일이 있다고 가정 합니다. 그리고 추가 : 활성 PATH ~/bin
보다 앞서 있다고 가정 /bin
하십시오.
답변
이것을 당신의 ~/.bashrc
:
alias time=/usr/bin/time
답변
이 enable
명령을 사용하여 특정 내장 기능을 비활성화 할 수 있습니다 .
$ enable -n kill
그러나 time
키워드이므로 작동하지 않습니다.
$ builtin time
bash: builtin: time: not a shell builtin
따라서 별칭을 재정의하기 위해 별칭을 만들었습니다.
$ alias time=/usr/bin/time