หากคุณต้องการจับรหัสสถานะ HTTP ในตัวแปร แต่ยังคงเปลี่ยนเส้นทางเนื้อหาไปยัง STDOUT คุณต้องสร้าง STDOUT สองรายการ คุณสามารถทำได้ด้วยขั้นตอนการเปลี่ยนตัว> ()และคำสั่งเปลี่ยนตัว $ ()
ขั้นแรกให้สร้างบ่งแฟ้ม3
สำหรับกระบวนการปัจจุบันของคุณ STDOUT exec 3>&1
กับ
จากนั้นใช้ขดของ-o
ตัวเลือกในการเปลี่ยนเส้นทางเนื้อหาการตอบสนองไปยัง FIFO ชั่วคราวโดยใช้แทนคำสั่งแล้วภายในแทนคำสั่งที่เปลี่ยนเส้นทางออกกลับไปให้คำอธิบายถึงกระบวนการ STDOUT ไฟล์ปัจจุบันของคุณด้วย3
-o >(cat >&3)
นำทุกอย่างมารวมกันในbash
3.2.57(1)-release
(มาตรฐานสำหรับmacOS
):
# creates a new file descriptor 3 that redirects to 1 (STDOUT)
exec 3>&1
# Run curl in a separate command, capturing output of -w "%{http_code}" into HTTP_STATUS
# and sending the content to this command's STDOUT with -o >(cat >&3)
HTTP_STATUS=$(curl -w "%{http_code}" -o >(cat >&3) 'http://example.com')
โปรดทราบว่านี้ไม่ทำงานใน/bin/sh
ฐานะSamK ที่ระบุไว้ในความคิดเห็นด้านล่าง