Bash의 $PATH에 있는 모든 실행 파일을 나열하는 코드 줄이 있습니까?
답변1
이것은 답변은 아니지만 실행할 수 있는 바이너리와 명령을 보여줍니다.
compgen -c
(가설 bash
)
기타 유용한 명령
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
zsh 사용:
whence -pm '*'
또는:
print -rC1 -- $commands
(여러 구성 요소에 나타나는 명령의 경우 $PATH
첫 번째 구성 요소만 나열됩니다.)
전체 경로 없이 명령을 원하고 더 나은 측정을 위해 정렬하려면 다음을 수행하십시오.
print -rC1 -- ${(ko)commands}
(즉, 해당 연관 배열의 값이 아닌 키를 가져옵니다.)
답변3
POSIX 셸에서 최종 정렬 이외의 외부 명령( printf
폴백이 없는 경우 내장된 것으로 가정)을 사용하지 않고 실행 파일 이름에 개행 문자가 포함되어 있지 않다고 가정합니다.echo
{ set -f; IFS=:; for d in $PATH; do set +f; [ -n "$d" ] || d=.; for f in "$d"/.[!.]* "$d"/..?* "$d"/*; do [ -f "$f" ] && [ -x "$f" ] && printf '%s\n' "${f##*/}"; done; done; } | sort
빈 구성 요소 $PATH
( .
재정의 사용), 로 시작하는 구성 요소 -
, PATH 구성 요소 또는 실행 파일 이름에 와일드카드가 없고 \[?*
로 시작하는 실행 파일이 없는 경우 .
다음과 같이 단순화할 수 있습니다.
{ IFS=:; for d in $PATH; do for f in $d/*; do [ -f $f ] && [ -x $f ] && echo ${f##*/}; done; done; } | sort
POSIX를 사용 find
하고 다음을 수행하십시오 sed
.
{ IFS=:; set -f; find -H $PATH -prune -type f -perm -100 -print; } | sed 's!.*/!!' | sort
경로에 드물게 실행 불가능하거나 비정규 파일을 나열하려는 경우 더 쉬운 방법이 있습니다.
{ IFS=:; ls -H $PATH; } | sort
이는 도트 파일을 건너뜁니다. 필요한 경우 해당 -A
플래그를 추가하거나( ls
있는 경우) POSIX를 계속 사용하려면 다음을 수행합니다.ls -aH $PATH | grep -Fxv -e . -e ..
답변4
나는 이것을 생각해 냈습니다 :
IFS=':';for i in $PATH; do test -d "$i" && find "$i" -maxdepth 1 -executable -type f -exec basename {} \;; done
편집하다: 이는 Apache 사용자가 bin 디렉터리의 특정 파일을 읽을 때 SELinux 경고를 트리거하지 않는 유일한 명령인 것 같습니다.