Bir kabuk işlevi içinde nasıl bir “burada belge” oluşturabilirim?


2

Mac OSX 10.7.5 sistemimde William Shotts Jr.'ın müthiş Linux Komut Satırı üzerinden çalışıyorum. Shotts'un kapladığı linux'un% 90'ı, Darwin’e ne bulabileceğimi veya GTEM’in ne olduğunu anlamaya yetecek kadar yakın. Bunu, "Kabuk Betiği Yazma" bölümündeki 27. bölümde yaptım ve bir işlev içinde "burada dosyalar" oluşturarak telefonu kapattım.

Bir olsun syntax error: unexpected end of fileben şu işlevi bulunur hatayı:

report_uptime () {
  cat <<- _EOF_
    <H2>System Uptime</H2>
    <PRE>$(uptime)</PRE>
    _EOF_
  return
}

Aşağıdaki işlev yer tutucuyu kullanırsam hata gider:

report_uptime () {
  return
}

Ayrıca, betiğin herhangi bir yerinde, bir fonksiyonun dışında bir cat << _EOF_sorun olmadan bir "burada dosya" oluşturmak için formatı kullanıyorum :

cat << _EOF_
<HTML>
      <HEAD>
            <TITLE>$TITLE</TITLE>
      </HEAD>
      <BODY>
            <H1>$TITLE</H1>
            <P>$TIME_STAMP</P>
            $(report_uptime)
            $(report_disk_space)
            $(report_home_space)
      </BODY>
</HTML>
_EOF_

Herhangi birinin yanlış yaptığım hakkında bir fikri varsa, minnettar olurum!


2
EOF belirteci herhangi bir lider boşluksuz, hattında ilk şey olması gerekir.
— Ярослав Рахматуллин

Bu benim için çalıştı, @ Ярослав_Рахматуллин. [-]Darwin'in buradaki dosyaları için bir seçenek olduğunu sanmıyorum . cat << _EOF_değilcat <<- _EOF_
— BenU

Yanıtlar:


4

Eğer sisteminizde bash sürümü bozulmuş değilse, sistem ne olursa olsun çalışmalıdır.
— Ярослав Рахматуллин

Ekleyerek Ярослав_Рахматуллин olsa @ sayesinde -etmek <<önce boşlukları kaldırarak, sorunumu çözmedi _EOF_yaptı. Belki de "burada belgeler" cat <<Darwin'de eserler ile değil cat <<-. Çok <<-faydalı bir ayıp . Yorumunuzu cevabınıza taşıyın, kabul edeceğim. Ek: bash aslında kırılmış olabilir. Muhtemelen benim tarafımdan kırılmış, muhtemelen Mac'in Darwin'in sınırlamaları ...
— BenU

2
@BenU, man sayfasının burada çok özel olduğuna dikkat edin: sekme karakterleri boşluk
— glenn jackman

@glennjackman Sekmeler yerine boşluk kullanmak gerçekten benim sorunumun kaynağı olabilir. Metin editörümü varsayılan olarak sekme yerine iki boşluk kullanacak şekilde ayarladım. Teşekkürler!
— BenU
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.