ls
실행 가능한 스크립트와 실제 컴파일된 바이너리를 구별하는 것이 가능합니까 ?
권한은 일반적으로 동일하며( +x
), 둘 다 ls -F
별표( *
)가 붙어 있어 구별하기 어렵습니다. 색상을 설정하는 스크립트가 있지만 ls
파일이 실행 가능한지 여부에 따라 달라지므로 동일하게 나타납니다.
BG='01;32' # green
EX="ex=$BG" # file with execute permission
많은 파일에 확장 기능이 없기 때문에 확장 기능에 의존하고 싶지 않습니다.
cat
이상한 오류 메시지가 표시되고 "이 문제를 일으키는 코드는 무엇입니까?"라고 생각할 때 파일이 안전한지 알 수 있기를 원합니다.
표준 솔루션이 없다면 file
공통 함수에서 의 출력을 구문 분석하고 고유한 마크업을 삽입하는 것은 어떻습니까? 아니면 너무 느린가요 ls
?
답변1
바이너리와 스크립트를 구별하려면 파일의 내용을 살펴봐야 합니다. ls
그렇게 하지 않고 파일 이름과 메타데이터(유형, 권한 등)만 살펴봅니다.
file
이것은 스크립트와 바이너리를 다양한 방식으로 색상화하기 위한 대략적인 파서입니다 . 이는 다음과 같이 작동합니다 . 메타데이터를 추가하려면 패치 작업이 필요하며, 이를 위해서는 디렉터리 내용을 나열하는 데 ls -d
더 직접적인 방법(예: Perl 또는 Python)이 필요합니다 . lsx somedir/*
파일 이름에는 개행이나 콜론이 포함되어 있지 않다고 가정합니다(옵션을 사용하여 :
다른 문자열의 구분 기호를 변경할 수 있음).-F
file
lsx () {
file -iN -- "$@" |
while IFS= read -r line; do
name=${line%%: *}; type=${line#*: }
color=0
case $type in
application/x-executable*) color='32';;
text/x-shellscript*) color='01;32';;
application/*zip*) color='31';;
esac
printf '\033[%sm%s\033[0m\n' "$color" "$name"
done
}
답변2
당신은 놀 수 있습니다 dircolors
. 출력을 살펴보십시오 dircolors -p
. 내 시스템에서 다음과 같은 관련 정의를 찾았습니다.
# This is for files with execute permission:
EXEC 01;32
…
# Or if you want to colorize scripts even if they do not have the
# executable bit actually set.
#.sh 01;32
#
마지막 줄을 제거 하고 .sh 07;31
쉘 스크립트(확장자가 있는 모든 파일 .sh
)를 작성하면 빨간색으로 깜박입니다.
설정을 저장 ~/.dircolors
하고 라인에 추가하세요 .bashrc
.
eval "$(dircolor $HOME/.dircolors)"