
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)"