Command-Line

內聯 heredoc 而不是文件

  • December 5, 2016

我有一個命令(php 文件),它以文件的位置為參數。

例如。

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

有時我只需要一兩個詞,所以我真的不想創建 location.txt 文件,這樣我就可以用下一個命令引用它——我寧願以某種方式用命令傳遞它。例如,考慮location.txt上面範例中的內容只是:

mywords

有沒有辦法可以重寫原始命令行參數以僅提供“虛擬”文件的內容?

您可以使用該/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

如果你有一個允許程序替換的 shell,例如 zsh、bash 或 ksh,你可以這樣做

php ScriptName.php <(echo mywords)

shell 將設置一些方法來在不同的 shell 中執行 echo 命令,並以命名 fifo 或更常見的方式通過管道和 /dev/fd/XX 形式的文件名提供輸出。

引用自:https://unix.stackexchange.com/questions/328229