Bir baskın bir bash işlevi içinde nasıl kullanılır?


12

Bash işlevinin içine bir yorumlu metin eklemek mümkün müdür ?

Aşağıdaki önemsiz örnek bir hatayla sonuçlanır: ./heredoc_in_function.sh: 10: Syntax error: end of file unexpected (expecting "}")

#!/bin/sh

my_function () {
cat <<HEREDOC
heredoc contents
HEREDOC
}

my_function

Çevre:

  • Ubuntu 11.04 (GNU / Linux 2.6.38-8-sunucu x86_64)
  • GNU bash, sürüm 4.2.8 (1) -çalışma (x86_64-pc-linux-gnu)

Benedoc'un bir Perl olayı olduğu izlenimindeydim. BASH'de işe yarayacağına inanmak için herhangi bir neden var mı?
jdw

@jdw, burada dokümanlar bash dahil birçok dilde mevcuttur.
Zoredache

Bunu şimdi görüyorum. Güzel.
jdw

Yanıtlar:


10

Kodun bana iyi görünüyordu, bu yüzden satır için satır kopyaladım ve benim için çalıştı:

  • OSX 10.7, bash 3.2.48 (1) -çalışma (x86_64-apple-darwin11).
  • Ubuntu 10.04.3, bash 4.1.5 (1) -çalışma (x86_64-pc-linux-gnu)

Eksik veya boşluk / sekme / vb. Eklemediğinizden emin olmak için dosyayı elle yeniden yazmanız mümkün mü?

Ayrıca, nasıl yürütüyorsunuz? Yaptım chmod +x test.shve sonra./test.sh

EDIT: Kapanış HEREDOC ile satırın başına bir boşluk eklediğimde sizinle aynı hatayı aldım.

Ek Not: Kapanmanın arkasındaki bir boşluk HEREDOCda buna neden olabilir


1
Tuhaf, şimdi çalışıyor ... Vim renk sözdizimi vurgulama önce HEREDOC tanındı (kapatmadan HEREDOC önce bu alanı eklerseniz değil) Orijinal komut dosyasını sadece harici bir dosya kullanacak şekilde değiştirdim, bu yüzden ne olduğundan emin değilim yanlıştı. Yine de heredocs ile çok daha uygun olacak!
Leftium

1
Aslında! Bana bazı heredocları seviyorum.
David

1
Ayrıca: Bir kapatma arkasında boşluk sondaki HEREDOCAyrıca bu (hataları Bu tür izini gerçekten zor nefes..) Neden
0laf
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.