shell之报错“[[ : not found“解决方法

本文解释了sh命令无法识别[[]]表达式的问题,并介绍了bash与sh的区别。[[]]是bash脚本中的命令,直接使用sh命令会导致错误,解决方法是将sh替换为bash。

转载:https://www.cnblogs.com/han-1034683568/p/7211392.html
参考:https://blog.youkuaiyun.com/lc250123/article/details/90747798
sh命令无法识别"[[]]"表达式。

解决办法:bash与sh是有区别的,两者是不同的命令,且bash是sh的增强版,而"[[]]"是bash脚本中的命令,因此在执行时,使用sh命令会报错,将sh替换为bash命令即可

<think>我们遇到了在Linux Shell中执行HTTP请求时出现'http: command not found'错误。这意味着系统中没有安装名为`http`的命令行工具。通常,我们使用`curl`或`wget`来执行HTTP请求,但用户可能使用了`http`命令,这可能是`httpie`工具的一部分。 ### 解决方案: 1. **安装HTTPie工具**:`http`命令通常由HTTPie提供,这是一个用户友好的HTTP客户端。我们可以通过包管理器安装它。 2. **使用替代工具**:如果不想安装HTTPie,可以使用`curl`命令代替。 #### 步骤1:安装HTTPie 根据不同的Linux发行版,安装命令如下: - **Debian/Ubuntu**: ```bash sudo apt update sudo apt install httpie ``` - **CentOS/RHEL**: 首先启用EPEL仓库,然后安装: ```bash sudo yum install epel-release sudo yum install httpie ``` - **Fedora**: ```bash sudo dnf install httpie ``` - **使用pip安装(通用方法)**: 如果系统有Python和pip,可以这样安装: ```bash pip install --user httpie ``` 安装后,可能需要将用户级别的二进制目录添加到PATH中。例如,如果使用bash,可以将以下行添加到`~/.bashrc`: ```bash export PATH=$PATH:~/.local/bin ``` 然后运行`source ~/.bashrc`使更改生效。 安装完成后,就可以使用`http`命令了。 #### 步骤2:使用curl替代(如果不想安装HTTPie) 在用户提供的原始命令中,使用了`http`命令来发送POST请求。我们可以用`curl`命令重写这个请求。 原始命令: ```bash SESSIONHANDLE=$(printf '{ "properties": { "execution.runtime-mode": "batch" } }'| http --follow --timeout 3600 POST $host'/sessions' \ Content-Type:'application/json' \ Accept:'application/json' | jq -r '.sessionHandle') ``` 使用`curl`的等价命令: ```bash SESSIONHANDLE=$(printf '{ "properties": { "execution.runtime-mode": "batch" } }' | curl -s -X POST -H "Content-Type: application/json" -H "Accept: application/json" \ --connect-timeout 3600 -d @- "$host/sessions" | jq -r '.sessionHandle') ``` **参数解释**: - `-X POST`:指定请求方法为POST。 - `-H "Header: Value"`:设置请求头,这里设置Content-Type和Accept。 - `--connect-timeout 3600`:设置连接超时时间(单位秒),注意这里与原始命令中的`--timeout`类似,但curl中`--connect-timeout`仅指连接超时,而`--max-time`可以设置整个操作超时。如果需要整个操作超时,可以添加`--max-time 3600`。 - `-d @-`:从标准输入读取数据(即管道传入的数据)。 - `"$host/sessions"`:请求的URL。 ### 注意事项: 1. 如果选择安装HTTPie,安装后可以直接运行原命令。 2. 如果使用curl,需要按照上述改写命令。 3. 确保环境变量`host`已经正确设置(例如:`host='localhost:8083'`)。 ### 验证安装 安装HTTPie后,可以运行以下命令验证: ```bash http --version ``` 或者使用curl测试: ```bash curl --version ``` ### 相关问题 1. 如何用curl发送GET请求并处理JSON响应? 2. 除了HTTPie和curl,还有哪些常用的命令行HTTP客户端? 3. 如何在Linux中永久添加自定义路径到PATH环境变量? 4. 如何通过命令行HTTP工具上传文件? 5. 如何调试HTTP请求的详细过程(如查看请求头和响应头)? 以上方法应该能解决用户遇到的`http: command not found`问题。</think>### 解决 Linux Shell 中 "http: command not found" 错误 当在 Linux Shell 中遇到 "http: command not found" 错误时,表示系统未安装 HTTP 命令行工具。以下是完整的解决方案: #### 1. **安装 HTTPie 工具(推荐)** HTTPie 是用户友好的 HTTP 客户端,提供类似 `http` 的命令: ```bash # Debian/Ubuntu 系统 sudo apt update sudo apt install httpie # CentOS/RHEL 系统 sudo yum install epel-release sudo yum install httpie # 通过 Python pip 安装(通用方法) pip install --upgrade httpie ``` 验证安装: ```bash http --version # 应输出类似:httpie 3.2.1 ``` #### 2. **使用 curl 替代方案** 如果无法安装 HTTPie,可用 curl 重写命令: ```bash # 原始命令 echo '{"properties":{"execution.runtime-mode":"batch"}}' | \ http POST $host/sessions Content-Type:application/json Accept:application/json # curl 替代方案 echo '{"properties":{"execution.runtime-mode":"batch"}}' | \ curl -X POST -H "Content-Type: application/json" -H "Accept: application/json" \ -d @- $host/sessions ``` **参数说明**: - `-X POST`:指定 HTTP 方法 - `-H "Header: value"`:设置请求头 - `-d @-`:从标准输入读取数据 - `--connect-timeout 3600`:设置超时时间 #### 3. **临时修复 PATH 问题** 如果已安装但找不到命令,可能是 PATH 问题: ```bash # 查找 http 可执行文件位置 find / -name http 2>/dev/null | grep bin # 临时添加到 PATH(例如找到 /usr/local/bin/http) export PATH=$PATH:/usr/local/bin # 永久添加到 ~/.bashrc echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bashrc source ~/.bashrc ``` #### 4. **验证工具安装** ```bash # 测试 HTTPie http GET https://httpbin.org/get # 测试 curl curl https://httpbin.org/get ``` 成功响应应返回 JSON 格式数据。 #### 关键说明 1. **HTTPie 优势**:比 curl 更易用的 JSON 处理能力,自动格式化输出 2. **curl 通用性**:几乎所有 Linux 系统预装,但语法更复杂 3. **超时处理**:使用 `--timeout` 或 `--connect-timeout` 参数避免长时间等待 4. **代理设置**:若在代理环境中,需配置: ```bash export http_proxy=http://proxy.example.com:8080 export https_proxy=http://proxy.example.com:8080 ``` --- ### 相关问题 1. 如何用 curl 发送带认证头的 POST 请求? 2. HTTPie 和 curl 在 JSON 处理上有哪些主要区别? 3. 如何在 Linux 中永久添加自定义路径到 PATH 环境变量? 4. 如何通过命令行 HTTP 工具上传文件? 5. 除了 HTTPie 和 curl,还有哪些常用的命令行 HTTP 客户端?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值