Bash
為什麼我無法在 Bash 中擷取 AWS EC2 CLI 輸出?
我正在嘗試擷取
aws ec2 delete-snapshot
Bash 腳本命令中的輸出,但我無法獲取任何內容來擷取輸出。我已經嘗試過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
, (“標準錯誤”)。在您的終端螢幕上,您會同時看到stdout
和stderr
。
>
運算符實際上只是 的快捷方式,1>
並且再次僅重定向stdout
。2>
運算符類似於,但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$
因此,要將兩者重定向
stdout
到stderr
同一個文件,請使用>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