我在Linux shell脚本中执行curl [url]
命令。我希望同时获取该命令的退出码和输出,而不使用临时文件。
有没有方法可以实现这个目的?
OUTPUT=$(curl example.org)
EXIT_CODE=$?
echo "$EXIT_CODE: $OUTPUT"
(我没有足够的声望在用户559633的答案下评论。)
显然,如果将STDOUT发送到本地变量,则无法正常工作:
test.sh:
#!/bin/bash
function test1 () {
OUTPUT=$( ping -c 1 -W 1 blah.org )
EXIT_CODE=$?
echo "$EXIT_CODE: $OUTPUT"
}
function test2 () {
local OUTPUT=$( ping -c 1 -W 1 blah.org )
EXIT_CODE=$?
echo "$EXIT_CODE: $OUTPUT"
}
test1
test2
输出:
# ./test.sh
1: PING blah.org (205.150.150.140) 56(84) bytes of data.
--- blah.org ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
0: PING blah.org (205.150.150.140) 56(84) bytes of data.
--- blah.org ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
#!/bin/bash
function test1 () {
OUTPUT=$( ping -c 1 -W 1 blah.org )
EXIT_CODE=$?
echo "$EXIT_CODE: $OUTPUT"
}
function test2 () {
local OUTPUT
OUTPUT=$( ping -c 1 -W 1 blah.org )
EXIT_CODE=$?
echo "$EXIT_CODE: $OUTPUT"
}
test1
test2
输出:
1: PING blah.org (205.150.150.140) 56(84) bytes of data.
--- blah.org ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
1: PING blah.org (205.150.150.140) 56(84) bytes of data.
--- blah.org ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
在管道中获取命令的退出状态没有标准方法。
然而,如果您使用(或能够使用)Bash作为您的shell,则PIPESTATUS
内置数组变量保存最近执行的管道的结果。(请注意,这里一个单独的命令也算作管道)。
例如:
true | false | false | false; echo "${PIPESTATUS[0]}" "${PIPESTATUS[1]}"
输出:
0 1