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
, 글로브 및 디렉토리가 포함된 잘못된 형식의 항목을 처리합니다.