Pourquoi ne puis-je pas capturer AWS EC2 CLI Output en Bash?

J'essaie de capturer la sortie d'un aws ec2 delete-snapshot dans une command de script Bash, mais je ne peux rien get pour capturer la sortie. J'ai essayé result=$(command) , result=`command` etc. mais quand j'essaie d'echo $result il n'y a rien là-bas.

Voici un exemple de sortie.

 root@host:~# aws ec2 delete-snapshot --snapshot-id vid --output json>test A client error (InvalidParameterValue) occurred when calling the DeleteSnapshot operation: Value (vid) for parameter snapshotId is invalid. Expected: 'snap-...'. root@host:~# aws ec2 delete-snapshot --snapshot-id vid>test A client error (InvalidParameterValue) occurred when calling the DeleteSnapshot operation: Value (vid) for parameter snapshotId is invalid. Expected: 'snap-...'. root@host:~# cat test root@host:~# testing=$(aws ec2 delete-snapshot --snapshot-id vid) A client error (InvalidParameterValue) occurred when calling the DeleteSnapshot operation: Value (vid) for parameter snapshotId is invalid. Expected: 'snap-...'. root@host:~# echo $testing root@host:~# 

J'ai besoin d'automatiser la création et la suppression des instantanés, mais je ne peux pas capturer la sortie.

Est-ce que quelqu'un d'autre a rencontré ce problème?

2 Solutions collect form web for “Pourquoi ne puis-je pas capturer AWS EC2 CLI Output en Bash?”

L'opérateur > uniquement redirection de stdout ("sortie standard") ou "descripteur de file 1 ". Les messages d'erreur sont généralement imprimés sur un autre descripteur de file, 2 , stderr , ("erreur standard"). Sur votre écran de terminal, vous voyez à la fois stdout et stderr .

L'opérateur > est vraiment plus simplement un raccourci pour 1> , et encore une fois, ne redirige que stdout . L'opérateur 2> est similaire à 1> mais au lieu de redirect stdout , il redirige stderr .

 user@host$ echo hello world >/dev/null user@host$ echo hello world 1>/dev/null user@host$ echo hello world 2>/dev/null hello world user@host$ 

Donc, pour redirect stdout et stderr vers le même file, utilisez >file 2>&1 .

 user@host$ echo hi 2>/dev/null 1>&2 user@host$ 

Cela dit, "redirigez le stderr l'écho vers /dev/null , et redirigez stdout vers stderr.

 user@host$ curl --invalid-option-show-me-errors >/dev/null curl: option --invalid-option-show-me-errors: is unknown try 'curl --help' or 'curl --manual' for more information user@host$ curl --invalid-option-show-me-errors 2>/dev/null user@host$ user@host$ curl --invalid-option-show-me-errors >/dev/null 2>&1 user@host$ 

Dans Bash moderne, vous pouvez également utiliser &> pour redirect les deux stream vers le même file:

 user@host$ curl --invalid-option-show-me-errors &>/dev/null user@host$ 

Donc, pour vous, spécifiquement, utilisez:

 aws ec2 delete-snapshot --snapshot-id vid --output json >test 2>&1 

Ou

 aws ec2 delete-snapshot --snapshot-id vid --output json &>test 

La sortie d'erreur sera écrite dans stderr , pas stdout , et vous ne redirigez que sur stdout . Si vous souhaitez capturer stderr également, vous devez append 2>&1 , par exemple:

 aws ec2 delete-snapshot --snapshot-id vid --output json >test 2>&1 
  • Comment verrouiller Solaris 10 dans le shell
  • Script de connection commun
  • Verrouillé après l'installation d'un bash sans bit exécutable
  • Comparaison des coquilles Unix
  • Comment append un user linux en une seule ligne?
  • suivre la source de la command shell
  • Désactiver la possibilité de masquer l'historique des commandes bash
  • Restriction de l'accès shell SSH au serveur Debian
  • Le script Bash s'exécute manuellement, mais échoue sur crontab
  • PowerShell Regex pour la validation de DOMAIN \ username
  • Comment utiliser un script bash en tant que shell d'user dans centOS 7?
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.