是否可以检查当前的操作系统? 以下cmd在Windows上失败,因为chmod不存在
{ ...
"scripts": {
"post-update-cmd": "chmod -R 777 ../log"
}
}
有解决方法吗? 亲切的问候,罗伯特
答案 0 :(得分:3)
我认为最简单的解决方案是使用PHP本身:
{ ...
"scripts": {
"post-update-cmd": "php -r chmod('../log', 0777);"
}
}
这需要php
二进制文件在Linux / OSX / Windows上的PATH(或类似文件)中。
Ps:我无法回想起,但我相信道路应该是相对的 你的composer.json所在的位置,所以你可能需要调整上面的内容 相应的路径。
答案 1 :(得分:1)
可能的解决方案是将post update命令移动到钩子中并对那里的操作系统执行所有必要的检查。 在你的作曲家:
{ ...
"scripts": {
"post-update-cmd": "Hooks\MyHook::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
}
}
答案 2 :(得分:1)
感谢@alcohol指出我正确的方向。 简单的解决方案:
"scripts": {
"post-update-cmd": "php post-update-cmd.php"
}
后更新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 available\n";
}
echo "Finished\n";