Ben bu 'kombine' görebiliyordu tek yolu temelde ikinci oluşturmak için ilk komut, sonra çalıştırmak neden burada bir-doc, kullanmaktır:
#!/bin/sh
cat << EOF > /tmp/$$.php
<?php
\$string="$1";
echo "\nHellO ". \$string ."\n";
?>
EOF
/usr/bin/php -q /tmp/$$.php
retval=$?
rm /tmp/$$.php
exit $retval
Bu örnekte, $1
ilk argüman genişleyecektir. Ben çalıştırıldığında PHP genişletmek olacaktır (sadece PHP ile ilgili) diğer değişkenleri, kaçmış. $$
bir kabuk sadece script PID'ine genişler, gerçek geçici dosya /tmp/1234.php
gibi bir şey olacak. mktemp(1)
bağlantı saldırıları ve çarpışmalar daha dayanıklı olan bir geçici dosya isim yapmak için çok daha güvenli bir yoldur.
Ayrıca komut çıktığında sonra iade edilir retval
PHP çıkış durumunu kaydeder.
Oluşan dosya (kabuk için ilk argüman varsayarak foo
) bu gibi görünecektir:
<?php
$string="foo";
echo "\nHello " . $string . "\n";
?>
Bu, diğer komut yazmak için bash kullanmak için nasıl bir iğrenç gösteri tür, ama en azından olası olduğunu göstermektedir. (Eğer belirtildiği gibi) 'birleştirmek' için size gönderilen iki komut düşünebildiğim Onun tek yolu.