Molte persone usano oneliner e script contenenti codice lungo le linee
cat "$MYFILE" | command1 | command2 > "$OUTPUT"
Il primo catè spesso chiamato "uso inutile di gatto" perché tecnicamente richiede l'avvio di un nuovo processo (spesso /usr/bin/cat) in cui ciò potrebbe essere evitato se il comando fosse stato
< "$MYFILE" command1 | command2 > "$OUTPUT"
perché allora la shell deve solo avviarsi command1e puntare semplicemente stdinal file dato.
Perché la shell non esegue automaticamente questa conversione? Sento che la sintassi dell '"uso inutile del gatto" è più facile da leggere e la shell dovrebbe avere abbastanza informazioni per sbarazzarsi automaticamente del gatto inutile. Il file catè definito nello standard POSIX, pertanto la shell dovrebbe essere autorizzata a implementarlo internamente anziché utilizzare un percorso binario. La shell potrebbe anche contenere l'implementazione solo per una versione dell'argomento e il fallback al percorso binario.
lseekè un comportamento ancora definito e potrebbe causare un risultato diverso, il diverso comportamento di blocco può essere semanticamente significativo, ecc. Sarebbe possibile apportare la modifica se sapessi quali erano gli altri comandi e sapevi che non gli importava, o se non ti interessava la compatibilità a quel livello, ma il vantaggio è piuttosto piccolo. Immagino che la mancanza di benefici spinga la situazione più del costo di conformità.
catse stessa, o qualsiasi altra utility. È anche consentito sapere come funzionano le altre utility che appartengono al sistema (ad esempio, può sapere come si comporta l' grepimplementazione esterna fornita con il sistema ). Questo è completamente praticabile, quindi è del tutto giusto chiedersi perché non lo facciano.
grep. E sed. E awk. E du. E quante centinaia se non migliaia di altre utility?