쉘에 알려진 모든 명령 나열

쉘에 알려진 모든 명령 나열

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를 누르면 현재 셸에서 사용할 수 있는 모든 명령 목록이 표시됩니다. 두 번째 질문에는 별칭을 사용해야 한다고 생각합니다.쉘 별칭.

관련 정보