在 Bash 脚本中,您可以使用命令替换功能将 stdout 和 stderr 捕获到变量中。有两种方法可以实现这一目标:
这种方法适用于捕获单个命令的输出。例如,如果您想将 ls
命令的输出捕获到变量 output
中,可以使用以下语法:
output=$(ls)
这将把 stdout 的内容赋值给变量 output
。如果您还想捕获 stderr,可以使用以下语法:
output=$(ls 2>&1)
这里,2>&1
表示将 stderr(文件描述符 2)重定向到 stdout(文件描述符 1)。
这种方法与方法 1 类似,但使用反引号而不是圆括号和美元符号。例如:
output=`ls`
同样,如果您还想捕获 stderr,可以使用以下语法:
output=`ls 2>&1`
捕获命令输出到变量的常见应用场景包括:
grep
、awk
或其他文本处理工具。以下是一个完整的示例脚本,演示如何捕获 ls
命令的 stdout 和 stderr,并根据输出执行不同的操作:
#!/bin/bash
# 捕获 stdout 和 stderr
output=$(ls /nonexistent_directory 2>&1)
# 检查命令是否成功执行
if [ $? -eq 0 ]; then
echo "命令成功执行,输出如下:"
echo "$output"
else
echo "命令执行失败,错误信息如下:"
echo "$output"
fi
在这个示例中,我们尝试列出一个不存在的目录。由于目录不存在,ls
命令将产生一个错误,stderr 将被捕获并存储在变量 output
中。然后,我们检查命令的返回状态,并根据结果输出相应的信息。
通过这种方式,您可以在 Bash 脚本中灵活地捕获和处理命令的输出。
领取专属 10元无门槛券
手把手带您无忧上云