Avoir la tête afin d'afficher toutes les mais la dernière ligne d'un fichier: la substitution de commande et d'e/S standard de redirection

J'ai essayé d'obtenir la head utilitaire pour afficher toutes les mais la dernière ligne de l'entrée standard. Le code que j'ai besoin est quelque chose le long des lignes de cat myfile.txt | head -n $(($(wc -l)-1)). Mais cela ne fonctionne pas. Je fais cela sur Darwin/OS X, qui n'a pas la belle et la sémantique de head -n -1 qui aurait réussi à me faire le même résultat.

Aucune de ces variations travail.

cat myfile.txt | head -n $(wc -l | sed -E -e 's/\s//g')
echo "hello" | head -n $(wc -l | sed -E -e 's/\s//g')

J'ai testé plus de variations et, en particulier, de ce travail:

cat <<EOF | echo $(($(wc -l)-1))
>Hola
>Raul
>Como Esta
>Bueno?
>EOF
3

Voici quelque chose de plus simple qui fonctionne également.

echo "hello world" | echo $(($(wc -w)+10))

Ce une manière compréhensible me donne illégale d'un nombre de lignes d'erreur. Mais c'est au moins me dit que le head programme ne consomme pas de l'entrée standard avant de passer à des trucs sur le shell interne est exécuté/la substitution de commande, une possibilité éloignée, mais celui que je voulais à la règle de toute façon.

echo "hello" | head -n $(cat && echo 1)

Ce qui explique le comportement de head et wc et leur interaction à travers la sous-coquille ici? Merci pour votre aide.

InformationsquelleAutor gkb0986 | 2013-08-08