# 显示“xxx：command not found”的解决方法

#### 现象描述

在Jenkins流水线脚本中执行命令，显示“xxx：command not found”，但是登录shell，能成功执行当前命令。


#### 可能原因

在服务器上修改环境变量PATH值，未在Jenkins流水线脚本执行环境上生效。


#### 处理步骤

- 方案一
  在服务器中“~/.bashrc”文件中添加对应环境变量后，重启Jenkins服务。

```
systemctl daemon-reload
systemctl restart jenkins
```


- 方案二

  1. 创建“~/jenkins.bashrc”文件，添加对应命令的环境变量，例如：

```
export HELLO_WORLD=/opt/path/helloworld
export PATH=$HELLO_WORLD/bin:$PATH
```


  2. 在流水线脚本中添加以下shell命令。

```
source
~
/jenkins.bashrc
```


- 方案三
  在节点配置中，添加环境变量设置，配置路径为“系统管理 > 节点管理 > 选择对应的节点 > 配置从节点 > 节点属性”。


- 方案一中，重启Jenkins服务后，只会应用用户环境变量“~/.bashrc”的修改，不会应用系统环境变量“/etc/profile”的修改。即通过“/etc/profile”来修改环境变量，不会在Jenkins上设置出对应的环境变量的值。
- 使用sudo执行命令时，默认只会在“/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin”目录下查找，不会按照PATH值去查找。在这类情况下，建议不要使用sudo，如果一定需要使用sudo，可以通过添加该命令软链接到sudo查找目录下的方式修改（其他方式还有通过修改sudoers等，可自行查找修改方案）。
- 服务器上存在多个命令可执行版本，例如Java 8、Java 11，将Java执行的环境变量从Java 8修改为Java 11后，此时若依然使用的是Java 8的版本，注意应该按照首部追加环境变量的方式进行修改。
  执行命令时，系统会按照环境变量的值并按照首尾顺序进行查找。在已有多个可执行命令的服务器中，如果是尾部追加环境变量“$PATH:xxx”的方式，新的路径可能会被原有的路径覆盖，从而依然选中旧的版本，所以应该选择首部追加环境变量的方式“xxx:$PATH”。

```
# export PATH=/opt/path/binary/bin:$PATH
```
