bash
인식된 모든 명령을 나열하려면 셸( )에 무엇을 입력해야 합니까 ?
또한 이것은 쉘마다 다른가요? 아니면 모든 쉘에는 인식할 수 있는 명령의 "디렉토리"가 하나만 있습니까?
둘째, 다른 질문이지만 둘 중 하나를 어떻게 무시할 수 있습니까? 즉, view
방금 로드된 것으로 보이는 Ubuntu 시스템의 기존 명령을 대체하기 위해 내 명령을 어떻게 작성합니까 vim
?
답변1
당신은 그것을 사용할 수 있습니다compgen
compgen -c # will list all the commands you could run.
참고로:
compgen -a # will list all the aliases you could run.
compgen -b # will list all the built-ins you could run.
compgen -k # will list all the keywords you could run.
compgen -A function # will list all the functions you could run.
compgen -A function -abck # will list all the above in one go.
답변2
쉘은 네 가지 명령을 알고 있습니다.
- 별칭: 특정 옵션이 있는 명령의 별칭입니다. 이는 쉘의 초기화 파일(bash용)에 정의되어 있습니다
~/.bashrc
. - 함수: 이름이 있는 쉘 코드 조각입니다. 별칭과 마찬가지로 셸의 초기화 파일에 정의됩니다.
- 내장 명령: 쉘에는 소수의 내장 명령이 함께 제공됩니다. 대부분의 내장 명령은 쉘 상태를 조작합니다(
cd
현재 디렉토리 변경,set
옵션 및 위치 인수 변경,export
환경 변경 등). 대부분의 쉘은 기본적으로 동일한 내장 기능 세트를 제공하지만 각 쉘에는 기본 세트에 대한 일부 확장이 있습니다. - 외부 명령: 쉘과 독립적입니다. 다른 프로그램과 마찬가지로 쉘이 전달됩니다.실행 가능한 검색 경로. 환경
PATH
변수에는 프로그램을 검색하기 위한 콜론으로 구분된 디렉터리 목록이 포함되어 있습니다.
동일한 이름을 가진 명령이 여러 개 있는 경우 위 순서의 첫 번째 항목이 실행됩니다.
를 실행하면 이름에 해당하는 명령 유형을 볼 수 있습니다 type some_name
.
alias
매개변수 없이 내장 함수를 실행하여 별칭을 나열 할 수 있습니다 . 모든 쉘에 적용되는 기능이나 내장 기능을 나열하는 것은 불가능합니다. 쉘 문서에서 내장 명령 목록을 찾을 수 있습니다.
Bash에서 set
내장 함수는 정의 및 변수와 함께 함수를 나열합니다. bash, ksh 또는 zsh에서 typeset -f
함수 및 해당 정의를 나열합니다. Bash에서는 모든 유형의 모든 명령 이름을 나열할 수 있습니다 compgen -c
. compgen -A alias
, 를 사용하여 compgen -A builtin
compgen -A function
특정 유형의 명령을 나열 할 수 있습니다. 추가 문자열을 전달하여 compgen
해당 접두사로 시작하는 명령만 나열할 수 있습니다.
echo ${(k)aliases}
zsh에서는 , echo ${(k)functions}
및 를 사용하여 특정 유형의 현재 사용 가능한 명령을 나열 할 수 있습니다 echo ${(k)builtins}
( echo ${(k)commands}
마지막 명령은 외부 명령만 나열함).
다음 셸 독립적 코드 조각에는 사용 가능한 모든 외부 프로그램이 나열되어 있습니다.
case "$PATH" in
(*[!:]:) PATH="$PATH:" ;;
esac
set -f; IFS=:
for dir in $PATH; do
set +f
[ -z "$dir" ] && dir="."
for file in "$dir"/*; do
if [ -x "$file" ] && ! [ -d "$file" ]; then
printf '%s = %s\n' "${file##*/}" "$file"
fi
done
done
Bash에는 해시 명령이라는 극단적인 경우가 있습니다.
배쉬 참조 매뉴얼설명하다:
해시 테이블에서 명령을 찾을 수 없는 경우에만 $PATH의 디렉터리 전체 검색이 수행됩니다.
노력하다:
set -h
mkdir ~/dir-for-wat-command
echo 'echo WAT!' >~/dir-for-wat-command/wat
chmod +x ~/dir-for-wat-command/wat
hash -p ~/dir-for-wat-command/wat wat
wat
환경 PATH
변수는 포함되거나 ~/dir-for-wat-command
표시 compgen -c
되지 않지만 wat
실행할 수는 있습니다 wat
.
기존 명령을 숨기려면별칭 또는 함수 정의.
¹예외 : 일부 내장 함수(특수 내장 기능)는 함수에 의해 섀도잉될 수 없습니다. 하지만 기본 모드의 bash 및 zsh는 이 시점에서 POSIX와 호환되지 않습니다.
답변3
이것을 사용해 보세요.세게 때리다:
( # usage of a sub processus: the modificaion of PATH variable is local in ( )
PATH+=:EOF # little hack to list last PATH dir
printf '%s\n' ${PATH//:/\/* }
)
답변4
Tab 키를 두 번 누른 다음 y를 누르면 현재 셸에서 사용할 수 있는 모든 명령 목록이 표시됩니다. 두 번째 질문에는 별칭을 사용해야 한다고 생각합니다.쉘 별칭.