bash가 쉘 키워드 대신 기본적으로 바이너리 (/ usr / bin / time)를 사용하게하려면 어떻게해야합니까?
which timeReturns /usr/bin/time
type timeReturns 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\meti"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별칭이 있더라도\testPATH 명령 (또는 비활성화되지 않은 경우 내장)을 실행합니다. -
내장을 사용하십시오 (내장
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