【问题标题】:Symfony Process component: argument substitution with curly bracesSymfony Process 组件:用花括号替换参数
【发布时间】:2017-04-12 15:03:14
【问题描述】:

这是一个代码:

$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();

当我运行这个 sn-p 时,我看到了这个输出:

/usr/bin/gm 转换:无法打开文件 (/path/thumbs/video{1..353}.jpg) [没有这样的文件或目录]。

我认为这是因为 video{1..353}.jpg 替换不起作用,Symfony Process builder 将其视为常规文件名,当然不存在。

我尝试为它创建一个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();

它可以工作,但我想要一个比这更干净的代码。

有没有人有一些想法如何改进它?提前致谢。

【问题讨论】:

    标签: bash symfony substitution curly-braces


    【解决方案1】:

    您可能已经猜到了,{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"';
    

    也就是说,您可以使用 -c "..." 选项传递 Bash 代码以使用 bash 执行。

    【讨论】:

    • 哇,真快,谢谢!感谢您使用bash -c 提醒此语法!只是好奇,是否可以将 Symfony 的 shell 更改为 bash 将一些属性传递给它的类?
    猜你喜欢
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 2020-04-29
    • 2019-01-13
    • 1970-01-01
    相关资源
    最近更新 更多