【问题标题】:How to get bash to check for the location of a file?如何让 bash 检查文件的位置?
【发布时间】:2010-09-04 08:28:04
【问题描述】:

我希望我的 bash 脚本找到 PHP 的安装位置 - 这将在不同的 Linux 服务器上使用,其中一些将无法使用 which 命令。我需要第二行的帮助:

#!/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

【问题讨论】:

    标签: php linux bash


    【解决方案1】:

    使用这个:

    `which php`
    

    但这是会做的:

    #!/bin/env php
    <?php
    
    require 'script.php';
    

    【讨论】:

    • 您说要使用which php,尽管原来的帖子说有些人无法访问which。另外,您可能误读了这个问题。他正在尝试通过命令行执行 PHP 脚本,但为了做到这一点,他需要 PHP 可执行文件的路径。如果 PHP require 无法执行,他将如何帮助他?
    • 嗨,德里克。既然您因为包含“哪个”而对我投了反对票,您应该看到我提供了两个答案。几乎每个 UNIX 发行版都有 /bin/env,使用它会在路径中找到 PHP 的位置,很像 'which',但不需要它。此外,require 可以向他展示如何在他的示例中包含该文件。
    • 我理解,但原发帖人想要一个命令行解决方案。另外,我是 Unix 新手,但也许您打算使用 /usr/bin/env?我尝试了 Ubuntu 和 Mac OS X,但 /bin 中都没有 env,只有 /usr/bin。但你是对的,env php script.php 应该可以工作,我也刚刚测试过。但是我不能改变我的投票;它被锁定了。
    【解决方案2】:

    Bash 有一个type 命令。

    type -p php
    

    将根据您的$PATH 为您提供可执行文件的位置。

    等号周围有空格,这是 Bash 不允许的。你的命令应该是这样的:

    PHP=$(type -p php) 
    

    或者你甚至可以直接执行它:

    $(type -p php) script.php
    

    【讨论】:

      【解决方案3】:

      试试这个:

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

      【讨论】:

        【解决方案4】:

        php 在哪里找到它

        【讨论】:

        • whereis 命令不适用于 /usr/local/zend/bin/php ...不知道为什么,但可能是因为它是从刚刚运行的 tar.gz 安装的粗暴的 bash 安装程序
        • whereis,如果我没记错的话,只会在您当前的 PATH 变量中查找您正在寻找的可执行文件。大多数标准路径包括 /usr/bin /bin,如果您是 root 用户:/usr/sbin 和 /sbin。因为在这种情况下,您将 php 放在一个特殊的目录中,除非您有修改的 PATH 变量,否则可能找不到它。您可以通过键入 echo $PATH 进行检查
        【解决方案5】:

        对于短代码,您可以使用:&amp;&amp;||

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

        顺便说一句 -x 如果文件可执行,则返回 true -e如果文件存在则返回true

        【讨论】:

          猜你喜欢
          • 2012-08-26
          • 1970-01-01
          • 1970-01-01
          • 2012-03-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-01
          • 1970-01-01
          相关资源
          最近更新 更多