2012-03-26 16 views
14

Bazı metni bash komut dosyası olarak, ancak komut dosyasında vermem gerekiyor. Bunun için kedi kullanırım, ama bir dezavantajı var. , değişkenleri ve'u yazıldığı sırada yorumlar. 'u bu'u önlemek istiyorum.Her şeyden alıntı yapılmadan bash'ın yorumlanmasını engelle

(benim betiğimde başarısız uzun süre) kullanılmadan nasıl yapılır? Örnek

cat >/tmp/script << EOF 
    $HOSTNAME 
    # lots of other stuff I do NOT want to escape like \$VARIABLE 
    # ... 
EOF 

cat /tmp/script 
myhostname.mylan 

istediğim:

cat /tmp/script 
$HOSTNAME 

Düzenleme: senaryomu (burada sadece $ HOSTNAME) unutmayın çok uzun, ben hepsini değiştirmek istemiyorum. Ayrıca alıntı tek < <

cat >/tmp/script '<< EOF 
    $HOSTNAME 
EOF' 
File not found: EOF' 

hüner nedir ile çalışmıyor? Teşekkürler. yankı ile deneyin

cat >/tmp/script << EOF 
    \$HOSTNAME 
EOF 
+0

Birisi benim durumumda neden yorumlanmadığını söyleyebilir mi? $ echo $ HOSTNAME '-> 'myhost'; $ echo \ $ HOSTNAME - - "$ HOSTNAME"; $ echo \ $ HOSTNAME>/tmp/s; cat/tmp/s' -> '$ HOSTNAME' –

cevap

48

.

+0

BU NE İSTİYORUM, TEŞEKKÜRLERİM! :-) – lzap

+0

'kedi << EOF' Doğru ve dengeli kaçış' $ 'şeyler ve' kedi << 'EOF'' yapar iyi bir av burada! –

+0

AMAZING! Sadece keşke harekete oy vermeyi becerebilseydim keşke :-) –

1
$ Escape

echo ' 
$HOSTNAME 
... 
' >> /tmp/script 
+0

Hayır, açıklandığı gibi - Bende binlerce satır var - Bunu yapmayacağım. Bu benim basit örneğimde işe yarar, evet, ama farklı bir çözüm bulmaya çalışıyorum. Bu nedenle konu. – lzap

+1

@lzap, 'sed \/\ $/\\ $/g''? –

1

Kullanım sed:

sed -n '20,30p' "$0" 

20 30 hat yazdırmak için, SSCE:

#!/bin/bash 
cat >/dev/null << EOF 
3 
4 $HOSTNAME 
5 ls 
6 $(ls -l) 
7 
8 echo 'foo 
9 bar' 
10 
11 echo "Foo 
12 $((4+4)) Bar" 
EOF 
sed -n '3,12p' "$0" 
echo "fine?" 
Kafa/kuyruk ile çalışan

da çalışmalıdır.

Üzerinde çalışıyorsanız ve çizgi ekleyip silerseniz, sayıları ayarlamanız gerekecektir.

cat << 'EOF' 
stuff here with $signs is OK 
as are `backquotes` 
EOF 

kılavuzdaki "belgeler burada" bölümüne bakın: Eğer alıntı şeyi istiyorsan

+0

Upvoting, şimdi bir çözüm var, ama güzel bir çaba! Teşekkürler! – lzap

İlgili konular