![内联定界符而不是文件](https://linux22.com/image/100275/%E5%86%85%E8%81%94%E5%AE%9A%E7%95%8C%E7%AC%A6%E8%80%8C%E4%B8%8D%E6%98%AF%E6%96%87%E4%BB%B6.png)
我有一个命令(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 形式的文件名提供输出。