2010-08-13 11 views
10

BASH aracılığıyla bir PHP betiğine yeni satır içeren bir dizeyi iletmeye çalışıyorum. Bunu yaparkenBash'ta komut vermek için yeni hatlı boru dizisi?

#!/bin/bash 

REPOS="$1" 
REV="$2" 

message=$(svnlook log $REPOS -r $REV) 
changed=$(svnlook changed $REPOS -r $REV) 

/usr/bin/php -q /home/chad/www/mantis.localhost/scripts/checkin.php <<< "${message}\n${changed}" 

görüyorum "n \" literal ziyade kaçan satır:

bir değişmez yeni satır için
blah blah issue 0000002.\nU app/controllers/application_controller.rb 

Herhangi fikirleri nasıl çevirmek için '\ n'? Bu arada < < < < bash'da ne yapıyor? Ben -e ters eğik çizgi yorumlanması bu da ters eğik çizgi yorumlamak edeceğini

Not (man echo göre) kaçar sağlayan

echo -e "${message}\n${changed}" | /usr/bin/php -q /home/chad/www/mantis.localhost/scripts/checkin.php 

size hangi potansiyel kaçar deneyin bir dosyada < geçer ...

cevap

17

biliyorum ${message}’da ve ${changed}’da. bash kılavuzunda itibaren


: İşte Strings

burada belgelerin bir varyantı, biçim şöyledir:

<<<word 

kelime genişletilmiş ve standart girişindeki komuta verilir.

yüzden

the_cmd <<< word 

bir "Burada dize" denir

echo word | the_cmd 
+0

Güzel! Aslında -a yerine -e değil, tam da aradığım şey buydu. –

+0

evet, haklısın, düşünüyordum -e ama yazarak -a ... Bunu düzeltirim. –

+0

'the_cmd <<< word' değil * oldukça * eko kelimesine eşdeğer | the_cmd': '<<<', daha uzun dizelerle ilgilenebiliyor gibi görünüyor. –

3
newline=$'\n' 
... <<< "${message}${newline}${changed}" 

<<< eşdeğerdir söyleyebilirim. "EOF" gibi bir sınırlayıcı gerektirmeyen "burada doküman" ın bir satır sürümü. Bu burada belge sürümü:

${message} ve ${changed} potansiyel kaçış dizilerinin yorumlanmasını engellemek için
... <<EOF 
${message}${newline}${changed} 
EOF 
1

, (eğer -n seçeneği belirtmedikçe bir satır, her echo sonra eklenir) bir kabuktaki dizeleri bitiştirmek deneyin :

(echo "${message}" ; echo "${changed}") | /usr/bin/php -q /home/chad/www/mantis.localhost/scripts/checkin.php 

parantez bir kabuktaki (parantez verildi eğer, ikinci yankı sadece çıkış php programı yöneltilebilir olurdu) komutları yürütün.

+0

"Kaçınılması için ..." - eğer echo -e'yi kullandıysanız –