内联定界符而不是文件

内联定界符而不是文件

我有一个命令(php 文件),它采用文件的位置作为参数。

例如。

$ php ./ScriptName.php /my/file/location.txt

有时我只需要一两个单词,所以我真的不想创建 location.txt 文件,以便我可以使用下一个命令引用它 - 我宁愿以某种方式使用该命令通过管道传输它。例如,考虑location.txt上面示例中的内容:

mywords

有没有办法可以重写原始命令行参数以仅提供“虚拟”文件的内容?

答案1

您可以使用一个变体/dev/fd/0诡计将字符串传递给需要文件名的脚本:

php ./ScriptName.php php://fd/0 <<<'mywords'

例如,script.php 包含:

<?php
   $handle=fopen($argv[1],"r");
   echo "Read: ".fgets($handle);
   fclose($handle);
?>

跑步:

php script.php php://fd/0 <<<'Some text'

输出:

Read: Some text

答案2

如果您有一个允许进程替换的 shell,例如 zsh、bash 或 ksh,您可以这样做

php ScriptName.php <(echo mywords)

shell 将设置某种方法来在不同的 shell 中运行 echo 命令,并以命名的 fifo 形式或更常见地通过管道和 /dev/fd/XX 形式的文件名提供输出。

相关内容