inline heredoc em vez de arquivo

2

Eu tenho um comando (arquivo php) que leva, como um argumento, a localização de um arquivo.

por exemplo,

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

Às vezes eu só preciso de uma ou duas palavras, então eu realmente não quero criar o arquivo location.txt apenas para que eu possa referenciá-lo com o próximo comando - eu prefiro canalizá-lo com o comando de alguma forma. Por exemplo, considere o conteúdo de location.txt do exemplo acima sendo apenas:

mywords

Existe uma maneira que eu possa reescrever o argumento original da linha de comando para apenas fornecer o conteúdo de um arquivo "virtual"?

    
por Brian Morton 05.12.2016 / 20:44

2 respostas

2

Você pode usar uma variante do /dev/fd/0 truque para passar uma string para um script que espera um nome de arquivo:

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

Por exemplo, o script.php contém:

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

Em exibição:

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

saídas:

Read: Some text
    
por 05.12.2016 / 21:04
3

Se você tem um shell que permite a substituição de processos, como zsh, bash ou ksh, você poderia fazer

php ScriptName.php <(echo mywords)

O shell irá configurar algum método para executar o comando echo em um shell diferente e disponibilizar a saída como um fifo nomeado ou mais comumente através de um pipe e um nome de arquivo no formato / dev / fd / XX. / p>     

por 05.12.2016 / 20:59