$ PATHフォルダに移動し、システムで利用可能な実行可能ファイルを表示するためのスクリプト

$ PATHフォルダに移動し、システムで利用可能な実行可能ファイルを表示するためのスクリプト

これが私が今まで持っているものです:

#!/bin/bash

for file in $PATH ; do # Scanning files in $PATH

        if [ -x ] ; then #Check if executable
                echo "Executable File"
        else
                echo "Not executable"
        fi
done

出力は「ファイル実行可能」です。

すべてのフォルダを正しく繰り返さないようです。

ベストアンサー1

必要なものが実行可能ファイルのリストであれば、findこれで十分です。

IFS=':'
find $PATH -type f '(' -perm -u+x -o -perm -g+x -o -perm -o+x ')'

これはリストされていますフルパスその変数の区切り文字であるコロン$PATH()で分割するIFS=':'必要があります。$PATH:

欲しくないならフルパスしかし、ただ実行ファイル名、することができます

IFS=':'
find $PATH -type f '(' -perm -u+x -o -perm -g+x -o -perm -o+x ')' -exec basename {} \; | sort

システムがfindGNUと互換性がある場合、条件ははるかに簡単です。

IFS=':'
find $PATH -type f -executable -exec basename {} \; | sort

@StephenHarrisが指摘したように、ここにはいくつかの問題があります。サブディレクトリが存在する場合、$PATHその$PATHサブディレクトリのファイルにアクセスできなくても報告されることがあります。この問題を解決するには、実際に必要POSIXに必要なものよりも多くのオプションがありますfind。この問題に対するGNU準拠のソリューションは次のとおりです。

IFS=':'
find $PATH -maxdepth 1 -type f -executable -exec basename {} \; | sort

これらのサブディレクトリに入らない-maxdepth 1ように指示します。find

おすすめ記事