我需要通过命令行运行脚本,但运行它所需的文件要求我在脚本目录中。但我无法为我需要运行的每个命令行执行此操作。他们超过五千。有人可以告诉我如何轻松地格式化列表或添加一些使其运行的格式。我有这样的事情......
php /path/to/the/script/01240/script.php
php /path/to/the/script/03770/script.php
php /path/to/the/script/02110/script.php
php /path/to/the/script/02380/script.php
php /path/to/the/script/03220/script.php
php /path/to/the/script/02340/script.php
php /path/to/the/script/03720/script.php
php /path/to/the/script/03460/script.php
php /path/to/the/script/0180/script.php
php /path/to/the/script/02000/script.php
php /path/to/the/script/01830/script.php
php /path/to/the/script/0980/script.php
php /path/to/the/script/0400/script.php
php /path/to/the/script/02750/script.php
php /path/to/the/script/0760/script.php
php /path/to/the/script/02690/script.php
.....它继续增加5000行。
答案 0 :(得分:1)
find -type f -iname script.php -execdir php {} \;
或者,如果脚本的名称不同:
find -type f -iname '*.php' -execdir php {} \;
编辑:如果它是特定脚本的列表而不是全部: 另一种方法是在php.ini中定义一个auto_prepend_file(或者这个脚本的自定义php.ini),这样你就可以放在那里:
<?php
chdir(dirname($argv[1]));
?>
答案 1 :(得分:0)
您无需手动编辑列表。编写另一个读入主脚本的脚本,并在每个脚本之前/之后添加cd
个命令。然后运行结果。
答案 2 :(得分:0)
您可以使用以下内容创建名为php1.bat
的新文件:
pushd %~p1
php %1
popd
这将更改为参数的目录,执行php并跳回。
在此之后,用您最喜欢的搜索/替换所有编辑器,用php /
替换脚本中call php1 /
的每个出现,这样它就不会执行php,而是php1.bat
。
答案 3 :(得分:0)
我可以建议两种可能的解决方案:
一种是为脚本添加一个选项,以便指定工作目录。每个进程都有自己的工作目录,因此这意味着您的PHP脚本会更改其目录,但是您运行脚本的shell则不会。一旦PHP脚本完成,你就会回到你开始的同一目录中的shell中。
<?php
$options = getopt("d:");
if (isset($options["d"])) {
chdir($options["d"]) or die("Cannot chdir to " . $options["d"]);
}
...do the rest of the script...
然后调用您的脚本:
php script.php -d /path/to/the/script/01240/
另一种解决方案是在调用PHP脚本时更改目录。记得我说每个进程都有自己的工作目录。但是你可以简单地使用括号使shell打开一个子进程。然后在该子shell中使用cd
来更改目录并调用PHP脚本。一旦你完成了parens中的子shell,你就会回到你开始的地方。
shell$ ( cd /path/to/the/script/01240/ ; php ~/bin/script.php)
shell$ ( cd /path/to/the/script/03770/ ; php ~/bin/script.php)
shell$ ( cd /path/to/the/script/02110/ ; php ~/bin/script.php)
但我猜你的脚本只是打开带有相对路径名的文件。如果您在脚本中相对于调用脚本的位置dirname(__FILE__)
执行了一些代码,那么这些解决方案将无效。