Bash에 명령이 있는지 확인

Faiq Bilal 2023년6월20일
  1. command -v 명령을 사용하여 Bash에 명령이 있는지 확인
  2. type 명령을 사용하여 Bash에 명령이 있는지 확인
  3. hash 명령을 사용하여 Bash에 명령이 있는지 확인
  4. test 명령을 사용하여 Bash에 명령이 있는지 확인
Bash에 명령이 있는지 확인

Bash 스크립팅 또는 프로그래밍을 사용하여 명령, 프로그램 또는 파일이 존재하는지 확인해야 할 수도 있습니다. 이 기사에서는 이러한 요구를 충족하기 위해 여러 가지 방법을 사용합니다.

Bash에서 명령이 존재하는지 여부를 확인할 수 있는 다양한 내장 명령을 사용할 수 있습니다. 이러한 명령의 사용은 아래에 설명되어 있습니다.

command -v 명령을 사용하여 Bash에 명령이 있는지 확인

command -v는 모든 POSIX 시스템 및 Bash에 내장된 기능입니다. 이 함수는 명령이 존재하는 경우 해당 명령에 대한 유효한 경로를 반환하고 그렇지 않은 경우 NULL을 반환하므로 명령이 존재하는지 확인합니다.

예를 들어:

command -v ls

출력:

/bin/ls

command -v는 Bash 스크립트에서 if 조건이 있는 명령의 존재를 확인하는 데 안전하게 사용할 수 있습니다. 아래에 설명되어 있습니다.

if ! [ -x "$(command -v npm)" ]; then
  echo 'Error: npm is not installed.' >&2
  exit 1
fi

위의 코드는 npm이 설치되어 있는지, 즉 사용자 디렉토리 내에 존재하는지 그리고 실행 가능한지 확인합니다. Pathnpm이 없으면 위 코드는 예외를 발생시키고 종료됩니다.

위의 템플릿은 해당 프로그램/명령/유틸리티의 이름을 사용하여 프로그램/명령/유틸리티의 존재를 확인하는 데 사용할 수 있습니다.

type 명령을 사용하여 Bash에 명령이 있는지 확인

type 명령은 사용하는 엔터티에 대한 정보를 제공하는 매우 유용한 기본 제공 명령입니다. 명령, 파일, 키워드, 쉘 내장 등과 함께 사용할 수 있습니다.

type 명령의 사용은 다음과 같습니다.

type command

출력:

command is a shell builtin

보다 구체적으로, 사용 사례의 경우 type 명령을 -p 옵션과 함께 사용하여 파일 또는 실행 파일의 경로를 가져올 수 있습니다. 이것의 사용법은 아래에 설명되어 있습니다.

type -p npm

출력:

/usr/local/bin/npm

npm이 시스템에 설치되었으므로 type -p가 유효한 경로를 반환했습니다. type 명령(플래그 없이)이 존재하지 않는 엔터티와 함께 사용되면 오류가 발생한다는 점에 유의해야 합니다. 그러나 같은 경우 type -p는 대신 NULL을 반환합니다.

이 동작은 아래에 설명되어 있습니다.

type yarn

출력:

bash: type: yarn: not found

yarn이 시스템에 설치되지 않았기 때문에 오류가 반환됩니다. 그러나 type -p yarn은 출력을 반환하지 않습니다. 프로그램의 존재를 확인해야 하는 방법과 이유에 따라 -p 플래그를 사용하거나 생략할 수 있습니다.

hash 명령을 사용하여 Bash에 명령이 있는지 확인

hash 명령은 type 명령과 유사하게 작동합니다. 그러나 명령을 찾을 수 없으면 성공적으로 종료됩니다.

또한 쿼리된 명령을 해싱하여 더 빠르게 조회할 수 있다는 추가 이점이 있습니다.

명령 구문은 다음과 같습니다.

hash -t ls

이 경우 쿼리 명령은 ls입니다. 시스템에 따라 출력은 아래와 같습니다.

/usr/bin/ls

이것은 명령이 호출될 때 실행되는 파일의 위치입니다. 명령을 찾을 수 없는 경우(예: 쿼리가 hash -t nothing과 같은 경우) 출력은 아래와 같습니다.

bash: hash: nothing: not found

출력은 명령이 발견될 때 설명적이며 다음에 더 빠른 검색을 위해 명령을 해싱하는 추가 이점을 제공합니다.

test 명령을 사용하여 Bash에 명령이 있는지 확인

test는 주로 비교 및 조건문에 사용되는 내장 쉘 명령입니다. 또한 파일 및 디렉토리의 존재를 확인하는 데 사용할 수 있습니다. ’test’는 확인하려는 파일 또는 디렉토리의 완전하고 유효한 경로가 제공되는 경우에만 작동한다는 점에 유의하는 것이 중요합니다.

파일 및 디렉토리와 관련된 test 명령에는 많은 옵션 플래그가 있으며 이러한 옵션 플래그 목록은 다음과 같습니다.

이러한 플래그는 파일이 존재하고 특수 조건이 충족되는 경우에만 true를 반환한다는 점에 유의해야 합니다. 아래에서 나열된 특별 조건을 찾을 수 있습니다.

  1. -b FILE - 파일이 특수 블록 파일인 경우 True.
  2. -c FILE - 파일이 특수 문자 파일인 경우 True.
  3. -d FILE - 디렉토리인 경우 True.
  4. -e FILE - 유형에 관계없이 파일인 경우 True.
  5. -f FILE - 일반 파일인 경우에만 True(예: 디렉토리나 장치가 아님).
  6. -G FILE - 명령을 실행하는 사용자와 동일한 그룹이 파일에 있는 경우 True.
  7. -h FILE - 심볼릭 링크인 경우 True.
  8. -g FILE - set-group-id(sgid) 플래그가 설정된 경우 True.
  9. -k FILE - 고정 비트 플래그가 설정된 경우 True.
  10. -L FILE - 심볼릭 링크인 경우 True.
  11. -O FILE - 명령을 실행하는 사용자가 소유한 경우 True.
  12. -p FILE - 파이프인 경우 True.
  13. -r FILE - 읽을 수 있는 경우 True.
  14. -S FILE - 소켓인 경우 True.
  15. -s FILE - True 크기가 0이 아닌 경우.
  16. -u FILE - set-user-id(suid) 플래그가 설정된 경우 True.
  17. -w FILE - 쓰기 가능한 경우 True.
  18. -x FILE - 실행 가능한 경우 True.

이 예에서 FILE은 사용자가 확인하고자 하는 파일의 완전하고 유효한 경로를 나타냅니다.

파일의 존재를 확인하기 위한 test의 사용은 다음과 같습니다.

test -e etc/random.txt && echo "FILE exists."

위의 코드 문은 etc/random.txt 파일의 존재를 확인하고 테스트 문이 true를 반환하는 경우 FILE exists를 출력합니다.

관련 문장 - Bash Command