2010-09-04 3 views
1

Привет, я хочу, чтобы мой скрипт bash нашел, где php установлен - это будет использоваться на разных серверах linux, а некоторые из них не смогут использовать команду which. В любом случае мне нужна помощь с этой второй линии:Сценарий BASH - Как получить bash для проверки местоположения файла?

#!/bin/bash 
if (php is located in /usr/bin/php); then 
    PHP = /usr/bin/php 
else 
    PHP = /usr/local/zend/bin/php 
fi 
$PHP script.php 

ответ

1

Попробуйте это:

if [ -e /usr/bin/php ]; then 
+0

ОК, который работал, спасибо! – beatbreaker

+0

Прохладный, рад, что это помогло! :) –

0

WhereIs PHP находит его

+0

Команда whereis не работает для/usr/local/zend/bin/php ... не знаю почему, но может быть, потому что она была установлена ​​из tar.gz, которая только запускала грубую программу установки bash – beatbreaker

+0

whereis, если я правильно помню, будет искать только текущую переменную PATH для исполняемого файла, который вы ищете. Большинство стандартных путей включают/usr/bin/bin, и если вы root:/usr/sbin и/sbin. Поскольку в этом случае у вас есть php в специальном каталоге, который, вероятно, не найдет его, если у вас нет модифицированной переменной PATH. Вы можете проверить, набрав echo $ PATH – MadcapLaugher

0

За короткий кусок кода, который вы можете использовать: && и ||

[ -x /usr/bin/php ] && PHP=/usr/bin/php || PHP=/usr/local/zend/bin/php 

BTW -x возвращение истина, если файл является исполняемым -e возвращает истину, если файл существует

4

Используйте это:

`which php` 

Но это то, что я бы:

#!/bin/env php 
<?php 

require 'script.php'; 
+0

Мой метод намного шире, чем принятый ответ. –

+1

Вы сказали, что используете 'who php', несмотря на оригинальное сообщение, в котором говорится, что некоторые из них не смогут получить доступ к' which'. Кроме того, возможно, вы неправильно поняли вопрос. Он пытается выполнить скрипт PHP через командную строку, но для этого ему нужен путь к исполняемому файлу PHP. Как PHP 'require' поможет ему, если он не сможет его выполнить? –

+0

Привет Дерек. Поскольку вы отказали мне в включении «того», вы должны увидеть, что я дал оба ответа. Практически во всех дистрибутивах UNIX есть/bin/env, и использование этого будет определять местоположение PHP в пути, как «что», но не требующее его. Кроме того, 'require' должен показать ему, как включить файл в свой пример. –

1

Bash имеет type команда.

type -p php 

даст вам расположение исполняемого файла на основе вашего $PATH.

У вас есть пространства вокруг ваших равных знаков, которые Bash не позволяет. Это то, что ваша команда должна выглядеть следующим образом:

PHP=$(type -p php) 

или вы могли бы даже выполнить его непосредственно:

$(type -p php) script.php 
Смежные вопросы