명령어가 설치되었는지 확인하는 방법을 알고 싶습니다.
vi
특히 명령이 유효한 모든 시스템 에서 별칭을 사용 하고 싶습니다 vim
. vim
내 *rc 파일을 일반으로 유지하고 싶습니다. 그러나 일부 운영 체제에서는 기본적으로 이를 설치하지 않습니다 vim
. 그리고 다른 측면에서는,vi
예Vi가 개선되었으나 vim
유효한 명령이 아닙니다.
나는 이것을 할 수 있다고 생각합니다 (bash 스타일):
#If the version info from vi includes the phrase "Vi IMproved", then vi IS vim.
vimInfo=$(vi --version 2> /dev/null | head -n 1 | grep -Fi 'VI IMPROVED')
if [[ -z $vimInfo ]]; then
if [[ -f $(which vim) ]]; then
#if the value returned by 'which' is a valid directory, then vim is installed
alias vi='vim'
else
#vim is not installed
echo "Vi IMproved (vim) is not installed";
fi
fi
하지만 더 좋은 방법이 있나요? 이 which
명령은 모든 UNIX 계열 시스템에 나타나는 것이 보장됩니까?
PS 저는 거의 모든 인기 쉘(bash, tcsh, zsh, ksh)에 대한 *rc 파일을 가지고 있으며 이 솔루션을 모든 쉘에 적용할 계획입니다. 따라서 솔루션은 셸에만 국한되어서는 안 됩니다. 문법할 수 있는하지만 그렇습니다.
답변1
예를 들어 다음 을 사용할 수 있습니다 command
.
command -v vim
쉘 내장 명령입니다. (zsh, bash, ksh,하지만tcsh)
존재하다tcsh다음을 사용할 수 있습니다.
~> sh -c 'command -v vim'
답변2
나는 당신이 문제를 너무 복잡하게 생각하고 있다고 생각합니다.
if type vim >/dev/null 2>/dev/null; then
alias vi=vim
fi
vim
실행해야 하는 유일한 이유 vi
는 이러한 명령이 유효한 시스템이 있지만 설치가 손상되었거나 동일한 이름을 가진 다른 프로그램이 있는 경우입니다.
이 type
내장 기능은 모든 POSIX 쉘과 대부분의 Bourne 쉘에 있습니다. csh에서 (그리고csh에서만), 사용 which
:
if ({ which vim }) alias vi vim >&/dev/null
물고기의 경우:
if type vim >/dev/null 2>/dev/null; alias vi=vim; end