현재 경로의 모든 파일/바이너리 나열

현재 경로의 모든 파일/바이너리 나열

현재 경로에 있는 모든 파일/실행 가능한 바이너리를 나열하기 위해 "ls -la" 스타일 명령을 실행하는 "쉬운" 방법이 있습니까?

(알 수 없는 접두사가 있지만 본질적으로 알려진 "이름"이 있는 명령을 찾기 위해 출력을 grep으로 파이핑할 계획입니다. 이 경우 bash의 자동 완성/탭은 기본적으로 쓸모가 없습니다. 그래서 일종의 "역자동" 완성 기능입니다." .)

답변1

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

이것은 디렉토리의 내용을 나열하는 기능입니다 $PATH. 인수가 전달되면 함수는 이름에 인수 중 하나가 포함된 명령만 나열합니다. 매개변수는 전역 패턴으로 해석됩니다.

shopt -s extglob
lspath () {
  local IFS pattern
  IFS='|'
  pattern="*@($*)*"
  IFS=':'
  for d in $PATH; do
    for x in "$d/"$pattern; do
      [ "$x" = "$d/$pattern" ] || echo "${x##*/}"
    done
  done | sort -u
}

많은 것들과 마찬가지로 zsh에서는 이것이 더 쉽습니다.

lspath () {
  (($#)) || set ''
  print -lr -- $^path/*$^@*(N:t) | sort -u
}

^문자매개변수 확장배열과 연결된 텍스트가 path=(/bin /usr/bin); echo $^path/fooprints 와 같은 각 배열 요소에 추가되도록 합니다 /bin/foo /usr/bin/foo.
/*$^@*희극적인 모욕처럼 보이지만 실제로는 일반 문자 /, 와일드카드 *, 수정자가 있는 특수 매개변수 $@(위치 매개변수 배열) 등입니다 ^. ~이다*
(N:t)글로벌 예선 N일치하는 항목이 없으면 빈 확장명을 얻습니다.기록 수정자 t각 게임의 기본 이름("tail")만 유지됩니다.

더 이상하게도 외부 전화를 피하는 것은 피상적인 관심일 뿐입니다.

lspath () {
  (($#)) || set ''
  local names; names=($^path/*$^@*(N:t))
  print -lr -- ${(ou)names}
}

사실, 당신이 찾고 있을 수도 있습니다apropos키워드가 포함된 명령에 대한 간단한 설명을 매뉴얼 페이지에서 검색하는 명령입니다. 한 가지 제한 사항은 매뉴얼 페이지가 있는 명령만 찾을 수 있다는 것입니다.

답변3

function findinpath () { 
   OLDIFS="$IFS" ; 
   IFS="$(printf ':\t\n')" ; 
   for regexp in "$@" ; do 
      for adir in $PATH ; do 
         find "$adir" -perm -111 -a ! -type d -ls 2>/dev/null | grep -i "/[^/]*$regexp"
      done ; 
   done ; 
   IFS="$OLDIFS" ; 
}

이 조회는 일치하는 항목만 일치합니다. 하나 이상의 "x"(실행 가능) 비트가 설정되어 있으며 이는 디렉터리가 아닙니다.

그리고 이를 정규식 목록과 함께 사용하여 다음을 찾습니다.

findinpath awk sed '\.sh$'

답변4

for i in $(echo $PATH | sed -e 's/\:/\ /g'); do find "$i" -perm +rwx -exec echo {} \; 2> /dev/null; done

먼저 sed에 echo $PATH하고 ":"를 ""로 바꿉니다.

그런 다음 rwx가 있는 파일을 찾고 에코하기 위해 각 항목을 조회합니다.

2> /dev/null이렇게 하면 find인쇄 오류가 발생하지 않습니다.

관련 정보