[英]Find executable path regardless if it is an alias or a command
我正在做一个 bash 脚本,它必须运行一个 php 文件。 通常是php file.php
,但是我运行这个脚本的服务器有很多版本的 php 每个安装(Plesk 服务器,许多项目,不同版本)
因此,对于命令行,有一些别名:
alias php7='/opt/plesk/php/7.4/bin/php'
alias php='/opt/plesk/php/8.0/bin/php'
我已经读过找到可执行文件的最佳方法是使用type
或command -v
,但在这种情况下,它不是 output 可执行文件的路径:
$ type php
php is aliased to `/opt/plesk/php/8.0/bin/php'
$ command -v php
alias php='/opt/plesk/php/8.0/bin/php'
我需要找到php
可执行文件的路径,无论它是别名、实际可执行文件还是其他任何东西。 问题是,现在,如果我在我的脚本中运行php file.php
我得到这个:
$ ./test
./test: line 9: php: command not found
有什么帮助吗? 谢谢!!
更新:这是我正在做的脚本的内容:
#!/usr/bin/env bash
SCRIPT_DIR="$( pwd )"
CLI_FILE="${SCRIPT_DIR}/ofw/vendor/cli/cli.php"
PHP_FILE="$( which php )"
if test -f "$CLI_FILE"; then
php $CLI_FILE
else
echo "ERROR: OFW CLI must be run in a OFW project folder."
fi
如果./test
是 shell 脚本,请注意您的别名对它不可用。
除非你真的要求它:
shopt -s expand_aliases
source ~/.bashrc # or whatever file defines your aliases.
php file.php # should now work
不过更简单的方法是将php目录添加到脚本的PATH中
PATH=/opt/plesk/php/8.0/bin/php:$PATH
php file.php
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.