Bash에 명령이 있는지 확인
-
command -v
명령을 사용하여 Bash에 명령이 있는지 확인 -
type
명령을 사용하여 Bash에 명령이 있는지 확인 -
hash
명령을 사용하여 Bash에 명령이 있는지 확인 -
test
명령을 사용하여 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
이 설치되어 있는지, 즉 사용자 디렉토리 내에 존재하는지 그리고 실행 가능한지 확인합니다. Path
에 npm
이 없으면 위 코드는 예외를 발생시키고 종료됩니다.
위의 템플릿은 해당 프로그램/명령/유틸리티의 이름을 사용하여 프로그램/명령/유틸리티의 존재를 확인하는 데 사용할 수 있습니다.
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
를 반환한다는 점에 유의해야 합니다. 아래에서 나열된 특별 조건을 찾을 수 있습니다.
-b FILE
- 파일이 특수 블록 파일인 경우True
.-c FILE
- 파일이 특수 문자 파일인 경우True
.-d FILE
- 디렉토리인 경우True
.-e FILE
- 유형에 관계없이 파일인 경우True
.-f FILE
- 일반 파일인 경우에만True
(예: 디렉토리나 장치가 아님).-G FILE
- 명령을 실행하는 사용자와 동일한 그룹이 파일에 있는 경우True
.-h FILE
- 심볼릭 링크인 경우True
.-g FILE
-set-group-id
(sgid
) 플래그가 설정된 경우True
.-k FILE
- 고정 비트 플래그가 설정된 경우True
.-L FILE
- 심볼릭 링크인 경우True
.-O FILE
- 명령을 실행하는 사용자가 소유한 경우True
.-p FILE
- 파이프인 경우True
.-r FILE
- 읽을 수 있는 경우True
.-S FILE
- 소켓인 경우True
.-s FILE
-True
크기가 0이 아닌 경우.-u FILE
-set-user-id
(suid
) 플래그가 설정된 경우True
.-w FILE
- 쓰기 가능한 경우True
.-x FILE
- 실행 가능한 경우True
.
이 예에서 FILE
은 사용자가 확인하고자 하는 파일의 완전하고 유효한 경로를 나타냅니다.
파일의 존재를 확인하기 위한 test
의 사용은 다음과 같습니다.
test -e etc/random.txt && echo "FILE exists."
위의 코드 문은 etc/random.txt
파일의 존재를 확인하고 테스트 문이 true
를 반환하는 경우 FILE exists
를 출력합니다.