スクリプトは$ PATHのすべての実行可能ファイルを表示しません。

スクリプトは$ PATHのすべての実行可能ファイルを表示しません。

Ubuntuで、すべてのディレクトリのすべての実行可能ファイルを変数として表示するスクリプトを作成したいと思います$PATH。これは私のスクリプトです。

#!/bin/bash
IFS=:
for dir in $PATH;do
        echo $dir:
        for files in $dir/*;do
                b=$(basename $files)
                [ -x "$b" ] && echo $"    $b" 
        done
done 

しかし、出力は

/usr/local/sbin:
/usr/local/bin:
/usr/sbin:
/usr/bin:
/sbin:
/bin:
/usr/games:
/usr/local/games:
/snap/bin:
/home/sudin/programming/shell:
      brightness
      for
      ifthen
      loop
      mat2
      myfind
      searchex

他のディレクトリの実行可能ファイルがリストされないのはなぜですか?

ベストアンサー1

そして

[ -x "$b" ]

その名前のファイルがに保存されているかどうかをテストしています$bいいえPATHパスは実行可能ファイルなので、スクリプトは現在のディレクトリの実行可能ファイルと一致するもののみを検索します。

フルパスをテストすると問題が解決します。

[ -x "$files" ] && printf "    %s\n" "$b"

その間、引用文を修正してみましょう。

#!/bin/bash
IFS=:
for dir in $PATH;do
        printf "%s:\n" "$dir"
        for files in "$dir"/*;do
                b="$(basename "$files")"
                [ -x "$files" ] && printf "    %s\n" "$b"
        done
done

バラよりシェルで知られているすべてのコマンドのリストより包括的なソリューションのために、空のアイテムPATH、グローブ、およびディレクトリを含む無効な形式のアイテムを処理します。

おすすめ記事