web-dev-qa-db-fra.com

Canalisez plusieurs commandes en une seule commande

Comment puis-je diriger la sortie standard de plusieurs commandes vers une seule commande?

Exemple 1: combinez et triez la sortie des trois commandes d'écho:

echo zzz; echo aaa; echo kkk

sortie désirée:

aaa
kkk
zzz

Exemple 2: réécrivez ce qui suit pour que toutes les commandes soient dans une seule ligne de commande à l'aide de canaux, sans redirection vers un fichier temporaire:

setopt > /tmp/foo; unsetopt >> /tmp/foo; set >> /tmp/foo; sort /tmp/foo
51
Rob Bednark

Utilisez les parenthèses () pour combiner les commandes en un seul processus, qui concaténera la sortie standard de chacune d'entre elles.

Exemple 1 (notez que $ est l'invite du shell):

$ (echo zzz; echo aaa; echo kkk) | sort
aaa
kkk
zzz


Exemple 2:

(setopt; unsetopt; set) | sort
86
Rob Bednark

Vous pouvez utiliser {} pour cela et éliminer le besoin d'un sous-shell comme dans (list), ainsi:

{ echo zzz; echo aaa; echo kkk; } | sort

Nous avons besoin d'un caractère d'espacement après { et avant }. Nous avons également besoin du dernier ; lorsque la séquence est écrite sur une seule ligne.

Nous pourrions également l'écrire sur plusieurs lignes sans avoir besoin de ;:

Exemple 1:

{
  echo zzz
  echo aaa
  echo kkk
} | sort

Exemple 2:

{
  setopt
  unsetopt
  set
} | sort
13
codeforester

Sous Windows, ce serait comme suit: (echo zzz & echo aaa & echo kkk) | sort

Ou s'il se trouve dans un fichier batch, il peut être mono ligne (comme échantillon) ainsi que multiligne:

(
 echo zzz
 echo aaa
 echo kkk
) | sort

Remarque: Le message d'origine ne mentionne pas que c'est uniquement pour Linux, j'ai donc ajouté la solution pour la ligne de commande Windows ... elle est très utile lorsque vous travaillez avec VHD/VHDX avec diskpart à l'intérieur de scripts (echo diskpart_command) au lieu de l'écho sur le même, mais laissez le echo, il y a aussi une autre façon sans échos et avec > redirecteur, mais il est très sujet aux erreurs et beaucoup plus complexe à écrire (pourquoi utiliser un moyen compliqué sujet aux erreurs s'il existe un moyen simple qui fonctionne toujours bien) ... souvenez-vous également %d% vous donne le chemin réel (très utile pour ne pas coder en dur le chemin des fichiers VHD/VHDX).

2
Claudio