Jika Anda ingin mengambil kode status HTTP dalam suatu variabel, tetapi masih mengarahkan konten ke STDOUT, Anda harus membuat dua STDOUT. Anda dapat melakukannya dengan subtitusi proses> () dan memerintahkan subtitusi $ () .
Pertama, buat deskriptor file 3
untuk proses STDOUT Anda saat ini dengan exec 3>&1
.
Kemudian, gunakan -o
opsi curl untuk mengarahkan ulang konten respons ke fifo sementara menggunakan substitusi perintah, dan kemudian di dalam substitusi perintah itu, redirect output kembali ke proses Anda saat ini STDOUT 3
dengan deskriptor file -o >(cat >&3)
.
Menyatukan semuanya dalam bash
3.2.57(1)-release
(standar untuk 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')
Perhatikan bahwa ini tidak berfungsi /bin/sh
seperti yang dicatat oleh SamK dalam komentar di bawah .