È possibile creare ls distinguere gli script eseguibili dagli effettivi binari compilati?
I permessi sono spesso gli stessi (+x ), e con ls -F ottieni un suffisso asterisco (* ) per entrambi, quindi è difficile distinguerli. Ho uno script per impostare i colori di ls , ma si basa sul fatto che il file sia eseguibile o meno, quindi vengono visualizzati allo stesso modo:
BG='01;32' # green
EX="ex=$BG" # file with execute permission
Non voglio dipendere dall'estensione perché molti di questi file non ce l'hanno.
Voglio questo così quando vedo un messaggio di errore bizzarro e penso:"Quale codice lo ha causato?", So se è sicuro o meno cat il file.
Se non esiste una soluzione standard, che dire dell'analisi dell'output di file , in una funzione comune, e inserendo qualche segno distintivo? O sarebbe troppo lento per ls ?
Risposta accettata:
È necessario esaminare il contenuto di un file per distinguere tra binari e script. ls non lo farà, guarda solo i nomi dei file e i metadati (tipo, autorizzazione, ecc.).
Ecco un parser grezzo per file che colora gli script e i binari in modo diverso. Funziona come ls -d; l'aggiunta di metadati richiederebbe un lavoro di patch-up che richiede un approccio più diretto (ad esempio in Perl o Python); usa lsx somedir/* per elencare il contenuto di una directory. Si presume che i nomi dei file non contengano né newline né due punti (puoi cambiare il : separatore per qualche altra stringa con -F opzione per file ).
lsx () { file -iN -- "[email protetta]" | mentre IFS=leggi -r riga; nome=${riga%%:*}; type=${line#*:} color=0 case $type in application/x-executable*) color='32';; text/x-shellscript*) color='01;32';; applicazione/*zip*) color='31';; esac printf '