这是一段代码:
$cmd_make_sprite = '/usr/bin/gm convert /path/thumbs/video{1..353}.jpg -append /path/thumbs/sprite.jpg';
$process = new Process($cmd_make_sprite);
$process->run();
echo $process->getErrorOutput();
当我运行此代码段时,我看到了这个输出:
/ usr / bin / gm convert:无法打开文件 (/path/thumbs/video{1..353}.jpg)[没有这样的文件或目录]。
我认为这是因为video{1..353}.jpg
替换不起作用,Symfony Process构建器将其视为常规文件名,当然不存在。
我尝试为它制作sprite_wrapper.sh
:
#!/bin/bash
$@
并像这样使用它:
$cmd_make_sprite = 'bash sprite_wrapper.sh /usr/bin/gm convert /path/thumbs/video{1..353}.jpg -append /path/thumbs/sprite.jpg';
$process = new Process($cmd_make_sprite);
$process->run();
echo $process->getErrorOutput();
并且它有效,但我希望有一个比这更清晰的代码。
有没有人有一些想法如何改善它?提前谢谢。
答案 0 :(得分:2)
正如您可能已经猜到的那样,{x..y}
语法仅适用于Bash。
但Process
的默认shell通常为/bin/sh
,
这可能不是Bash。这就是为什么你的第一次尝试没有成功的原因。
中间人sprite_wrapper.sh
真的很难看,
并且不必要。你可以这样写:
$cmd_make_sprite = 'bash -c "/usr/bin/gm convert /path/thumbs/video{1..353}.jpg -append /path/thumbs/sprite.jpg"';
也就是说,您可以使用bash
选项将Bash代码传递给-c "..."
执行。