`command` 명령의 사용법은 무엇입니까?


34

최근에 명령을 찾았습니다. command수동 입력은 없지만 다음과 같이 도움말이 표시됩니다.

$ help command
command: command [-pVv] command [arg ...]
    Execute a simple command or display information about commands.

    Runs COMMAND with ARGS suppressing  shell function lookup, or display
    information about the specified COMMANDs.  Can be used to invoke commands
    on disk when a function with the same name exists.

    Options:
      -p    use a default value for PATH that is guaranteed to find all of
        the standard utilities
      -v    print a description of COMMAND similar to the `type' builtin
      -V    print a more verbose description of each COMMAND

    Exit Status:
    Returns exit status of COMMAND, or failure if COMMAND is not found.

command -v대안 which입니까?

이 명령은 어떤 인수를 허용하며 어떻게 / 언제 사용 command합니까?

답변:


44

command우리가 볼 수 있는 bash 내장입니다 :

seth@host:~$ type command
command is a shell builtin

우리 command는 쉘 bash가 제공 한다는 것을 알고 있습니다. man bash우리가 그것을 파고 그것의 사용이 무엇인지 볼 수 있습니다

(에서 man bash) :

command [-pVv] command [arg ...]
              Run  command  with  args  suppressing  the normal shell function
              lookup. Only builtin commands or commands found in the PATH  are
              executed.   If the -p option is given, the search for command is
              performed using a default value for PATH that is  guaranteed  to
              find  all  of  the  standard  utilities.  If either the -V or -v
              option is supplied, a description of command is printed.  The -v
              option  causes a single word indicating the command or file name
              used to invoke command to be displayed; the -V option produces a
              more  verbose  description.  If the -V or -v option is supplied,
              the exit status is 0 if command was found, and  1  if  not.   If
              neither  option  is  supplied  and  an error occurred or command
              cannot be found, the exit status is 127.   Otherwise,  the  exit
              status of the command builtin is the exit status of command.  

기본적으로 command"정상적인 기능 검색"을 우회 하는 데 사용 합니다. 예를 들어, 함수가 있다고 가정 해보십시오 .bashrc.

function say_hello() {
   echo 'Hello!'
}

실행할 때 일반적으로 say_hello터미널 배쉬에 명명 된 기능을 찾을 것입니다 say_hello당신에 .bashrc 전에 이 말, 발견,라는 응용 프로그램을 say_hello. 사용 :

command say_hello  

bash는 정상적인 함수 검색을 우회하고 내장 또는으로 바로 이동합니다 $PATH. 이 함수 조회 에는 별명 포함됩니다. 사용 command하면 기능과 별칭이 모두 무시됩니다.

-p옵션이 제공 되면 bash는 사용자 정의를 무시 $PATH하고 자체 기본값을 사용합니다.

-v또는 -V(짧은 설명을 인쇄 떠들썩한 파티 플래그 -v오랫동안, -V명령들).

참고 : 주석에서 souravc가 지적한 것처럼 쉘 내장에 대한 정보를 찾는 더 쉬운 방법은 여기에서 찾을 수 있습니다 .


1
또한 볼 thsi
souravc

@souravc 재밌 네요 command. 내 컴퓨터에 맨 페이지가 없습니다 .
Seth

2
시도하십시오 sudo apt-get install manpages-posix. 기본적으로 설치되지 않습니다. 여기를
souravc

@souravc 아주 좋아! 해당 링크를 답변으로 편집하겠습니다.
Seth

1
@ Nori-chan Bash 는 우분투의 기본 입니다. 입력 한 명령을 해석하고 수행 할 작업과 입력 한 정보를 사용하여 수행하는 방법을 결정합니다. Un * x 커맨드 라인을 배우면 배쉬를 배우게됩니다.
Seth

14

이것은 Bash 쉘의 내장 명령입니다.

이 내장에서 볼 수있는 유일한 이점은 다음 도움말 텍스트 문장에 요약되어 있습니다.

Can be used to invoke commands on disk when a function with the same name exists

따라서 프로그램 (일부 디스크에 저장된 이진 파일)을 실행하고 동일한 이름의 내부 쉘 기능이 존재하면이 내장 기능을 사용하여 프로그램을 호출 할 수 있습니다.

그리고 네, command -v와 같은 종류의 결과를 줄 것 type입니다.

대시 쉘에서도 발견했습니다.


1
더 명시 적으로 추가 할 가치가있는 것은 command (name)쉘 기능을 무시 하지만 그렇지 command -v (name)는 않습니다. command -v (name) >/dev/null쉘 내장, 기능 또는 외부 유틸리티인지 여부에 관계없이 해당 이름의 명령이 존재하는지 여부를 확인하는 이식 가능한 방법입니다.
hvd

1
-v 명령은 posix 대안으로 type, etc, stackoverflow.com/questions/762631/…
Javier López

실제 예제의 경우 Android AOSP 빌드 환경 (v4.2.2 이후)은 빌드 성공 여부 및 시간에 대한 정보를 내뿜는 'make'라는 쉘 함수를 정의합니다. AOSP 빌드 환경의 다른 쉘 함수 command make는 실제 실제 make 프로그램을 호출하는 데 사용 됩니다. 불행히도, AOSP 환경이 make프로그램 출력에 똥을 추가하기 시작했을 때 파산 한 다른 셸 스크립트가 있으며 그 여분의 출력이 신비하게 나온 곳을 알아내는 것은 지옥으로 자극적이었습니다.
Michael Burr

6

두 가지 용도로 사용됩니다.

한 가지 용도는 별명함수 를 무시 하고 별명이나 같은 이름의 함수가 존재하더라도 PATH에 있는 실행 파일을 실행 하는 것입니다.

예를 들어, 디렉토리 이름 ls에 a /를 추가 하는 별명을 사용 합니다.

$ alias ls='ls --classify'
$ ls -d .
./
$ command ls -d .
.

대화식 쉘에서 명령 이름 앞에 백 슬래시를 사용하는 것이 더 짧은 대안 구문으로 사용하는 것이 더 편리 할 수 ​​있습니다.

$ \ls -d .
.

다른 방법은 옵션을 사용하여 명령 이름을 사용하지 않을 때 실행될 명령찾는-v입니다. 가장 이식성이 뛰어나고 POSIX 변형 인 것 같습니다 which.

$ command -v ls
alias ls='ls --classify'
$ command -v sed
/bin/sed

3

command예를 들어, 특정 명령이 있는지 확인하려는 경우에 유용합니다. which는 조회에 별칭을 포함하므로 임의의 별칭을 해당 명령으로 간주하지 않기 때문에이 목적에 적합하지 않습니다.

즉, 다음과 같이 쉘 스크립트에서 작은 기능을 가질 수 있습니다.

exists() {
  command -v "$1" >/dev/null 2>&1
}

그런 다음 사용 가능한 명령 (여기서는 dialog)을 다음과 같이 테스트하십시오 .

if ! exists dialog ; then
   echo "This script requires 'dialog'."
   echo "Install it with 'sudo apt-get install dialog', then try again!"
   exit 1
fi

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.