現在のパスのすべてのファイル/バイナリを一覧表示する

現在のパスのすべてのファイル/バイナリを一覧表示する

現在のパスにあるすべてのファイル/実行可能なバイナリを一覧表示するために "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。引数が渡されると、関数は名前に引数の1つを含むコマンドのみを一覧表示します。パラメータはグローバルパターンとして解釈されます。

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キーワードを含むコマンドの簡単な説明をマニュアルページで検索するコマンドです。 1つの制限は、マニュアルページがあるコマンドのみを見つけることができることです。

答え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" ; 
}

この照会は一致するもののみを照合します。 1つ以上の「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印刷エラーが発生しません。

関連情報