这篇文章是因为这样的问题而来的:

本地从源装了php,命令可以直接使用

    which php
    $ /usr/local/bin/php

服务器是指定目录编译后使用alias引入的

    which php
    $ alias php='/opt/php56/bin/php'

可以看出,是因为php没有放入命令目录导致的,要达到效果需要了解bash的四种模式.

bash的四种模式及环境变量的加载

1. interactive-login shell 交互式登录shell

  1. /etc/profile 加载系统配置
  2. ~/.bash_profile ~/.bash_login ~/.profile 按顺序查找这三个个人配置文件,如果执行成功其中一个则返回(三个中只会有一个被执行)

2. non_interactive-login shell 非交互式登录shell

  1. 同 1

3. interactive-non_login shell 交互式非登录shell

  1. /etc/bash.bashrc
  2. ~/.bashrc

2. non_interactive-login shell 非交互式登录shell

  1. export BASH_ENV=~/.bashrc #找到bashrc则加载

从以上四种状态可以看出,我们需要的是 3 这种方式, 通过 man bash可以找到 -i参数可实现.

#!/bin/bash -i
php -v

在实际应用中, 使用bash -ic命令调用时,会导致频繁报 no job control in this shell错误.