shell 中 使用 hive -e 并将返回结果用变量接收,多种方法
时间: 2024-10-22 20:07:25 浏览: 66
在Shell中,如果你想通过`hive`命令运行Hive脚本并捕获其输出以便后续处理,可以采用几种方法来实现这个目标:
1. **管道操作**:
使用管道(`|`)结合`command_substitution`技巧,先运行`hive`命令并将结果赋值给变量。例如:
```sh
result=$(hive -e "SELECT * FROM your_table;" 2>&1)
```
这里`2>&1`用于捕获标准错误流,防止它被忽略。
2. **进程替换** (backticks):
可以使用反引号(````)将`hive`命令括起来,然后把整个表达式作为变量内容:
```sh
result=`hive -e "SELECT * FROM your_table;"`
```
注意这种方法在某些旧版本的Shell中可能不支持,并且可能有安全性风险。
3. **bash 的 `$(...)` 或 `"$(...)"` 引号**:
为了更现代和安全的方式,推荐使用`$(...)`:
```sh
result=$(hive -e "SELECT * FROM your_table;")
```
或者在双引号内使用命令替换,这样可以避免命令的特殊字符被解析:
```sh
result="$((hive -e 'SELECT * FROM your_table;'))"
```
4. **Hive的直接输出到文件**:
如果你想保存结果到文件再读取,可以这样做:
```sh
hive -e "SELECT * FROM your_table;" > output.txt
result=$(cat output.txt)
```
5. **Hive的shell脚本交互模式**:
虽然不是直接获取输出,但可以在`hive`命令行中交互地执行并查看结果,然后再手动将其复制到变量:
```sh
hive -e "SET hivevar=your_table_name;"
hive -e "SELECT * FROM ${hivevar};"
result=$?
echo "The result is:"
echo $result
```
无论哪种方法,执行完后,你可以使用`echo`, `printf`, 或其他方式检查`$result`变量的内容。
阅读全文