これが私が今まで持っているものです:
#!/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
システムがfind
GNUと互換性がある場合、条件ははるかに簡単です。
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