SORU
23 Mart 2010, Salı


nasıl kedi << bash EOF` iş?

Bir program (psql) çok satırlı giriş girmek için bir senaryo yazmak istedim

Google'da biraz araştırdıktan sonra aşağıdaki sözdizimini çalışır buldum:

cat << EOF | psql ---params
BEGIN;

`pg_dump ----something`

update table .... statement ...;

END;
EOF

Bu doğru psql bir giriş olarak çok satırlı dize (END; dahil BEGIN;) ve borular oluşturur.

ama nasıl çalıştığı hakkında hiç bir fikrim yok, bazı biri lütfen açıklayabilir mi?

Esas cat << EOF, > bir dosyaya çıkışları biliyorum, >> bir dosya girişi okur ekler bahsediyorum.

"<<" tam olarak ne iş yapar?

Ve bir adam bir sayfa mı?

CEVAP
23 Mart 2010, Salı


Bu sürecin içine bir dize koymak için heredoc biçimidir. Ayrıntı http://en.wikipedia.org/wiki/Here_document#Unix-Shells bkz.


man bash:

Burada Belgeler

Bu tür bir yeniden yönlendirme giriş okumak için kabuk bildirir bir çizgi kadar geçerli kaynak tek kelime (sondaki ile içeren boş olanlar) görülür.

Çizgiler, bu noktaya kadar okunan bütün olarak kullanılır bir komut için standart girdi.

Burada belge biçimi:

          <<[-]word
                  here-document
          delimiter

Hiçbir parametre genişleme, komut ikamesi, aritmetik genişleme ya da yol genişletme gerçekleştirilir kelime. Herhangi bir karakterkelimevardır alıntı, sınırlayıcıalıntı kaldırılması sonucukelimeve çizgiler -belge buradadeğil genişletti. Eğerkelime, tüm hatları tırnaksız. -belge buradaparametre genişleme, komut tabi ikame ve aritmetik genişleme. İkinci durumda, karakter dizisi \<newline> göz ardı, ve \ 16 karakter*,* 17 ** ve alıntı için kullanılmalıdır.

Eğer yönlendirme operatörü <<- tüm önde gelen sekme karakterleri ise giriş hatları ve kaldırılır satır içerensınırlayıcı. Bu kabuk betikleri içinde burada belgeler doğal bir şekilde girintili olmasını sağlar.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Modus Recordings

    Modus Record

    26 Kasım 2008
  • Nickcidious

    Nickcidious

    6 HAZİRAN 2011
  • super1988guy

    super1988guy

    9 Aralık 2007