编写器脚本部分依赖于



是否可以检查当前的操作系统?下面的cmd命令在windows上失败,因为chmod不存在

{ ...
  "scripts": {
    "post-update-cmd": "chmod -R 777 ../log"
  }
}

有解决这个问题的方法吗?此致敬礼,Robert

我认为最简单的解决方案是使用PHP本身:

{ ...
  "scripts": {
    "post-update-cmd": "php -r chmod('../log', 0777);"
  }
}

这要求php二进制文件在Linux/OSX/Windows的PATH(或类似)中。

Ps:我想不起来了,但我相信路径应该是相对的你的作曲家。Json是,所以您可能需要调整上面的内容相应的路径。

可能的解决方案是将post更新命令移到钩子中,并在那里执行所有必要的操作系统检查。在你的作曲家:

{ ...
  "scripts": {
    "post-update-cmd": "HooksMyHook::checkOS()"
  },
 "autoload": {
    "psr-0": {
        "Hooks": "src/"
    }
 }

}

然后创建一个类来处理你的逻辑:

...
class MyHook(){
 public static function checkOS(){
  // 1 - get operating system
  // 2 - is chmod exist? execute chmod -R 777 ../log
}
}

感谢@alcohol为我指明了正确的方向。简单的解决方案:

"scripts": {
  "post-update-cmd": "php post-update-cmd.php"
}

post-update-cmd.php:

#!/bin/php
<?php
ini_set('register_argc_argv', 0);
if (!isset($argc) || is_null($argc)) die('CLI only');
$log_dir = dirname(dirname(__FILE__)). DIRECTORY_SEPARATOR . 'log';
if( strpos(strtolower(php_uname('s')), 'win') === false ) {
    exec("mkdir -p $log_dir && chmod -R 777 $log_dir");
} else { // Windows !
    if( !file_exists($log_dir) ) {
        exec("mkdir $log_dir");
    }
    echo "WinOS - no chmod availablen";
}
echo "Finishedn";

相关内容

  • 没有找到相关文章

最新更新