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.