Bash

為什麼我無法在 Bash 中擷取 AWS EC2 CLI 輸出?

  • August 23, 2020

我正在嘗試擷取aws ec2 delete-snapshotBash 腳本命令中的輸出,但我無法獲取任何內容來擷取輸出。我已經嘗試過result=$(command)result=command``等等,但是當我嘗試回顯時,$result那裡什麼也沒有。

這是一些範例輸出。

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:~#

我需要自動創建和刪除快照,但我無法擷取輸出。

有沒有其他人遇到過這個問題?

>運算符僅重定向( “stdout標準輸出”)或“文件描述符1”。錯誤消息通常列印在不同的文件描述符上,2, stderr, (“標準錯誤”)。在您的終端螢幕上,您會同時看到stdoutstderr

>運算符實際上只是 的快捷方式,1>並且再次僅重定向stdout2>運算符類似於,但1>它不是重定向stdout,而是重定向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$

因此,要將兩者重定向stdoutstderr同一個文件,請使用>file 2>&1.

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

這表示,“將回顯重定向stderr/dev/null,並重定向stdout到 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$ 

在現代 Bash 中,您還可以使用&>將兩個流重定向到同一個文件:

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

所以對你來說,具體來說,使用:

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

或者

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

引用自:https://serverfault.com/questions/691319