Android

Bash heredoc

What is a heredoc? Here Documents Explained | Linux Terminal 201 - HakTip 179

What is a heredoc? Here Documents Explained | Linux Terminal 201 - HakTip 179

İçindekiler:

Anonim

Kabuk komut dosyaları yazarken tee , cat veya sftp gibi etkileşimli bir komuta çok satırlı bir metin veya kod bloğu geçirmeniz gereken bir durumda olabilirsiniz.

Bash ve Zsh gibi diğer kabuklarda, Burada belgesi (Heredoc), bir komuta birden çok girdi satırı geçirmenizi sağlayan bir yönlendirme türüdür.

HereDoc yazma sözdizimi aşağıdaki formu alır:

<< 'DELIMITER' HERE-DOCUMENT DELIMITER

  • İlk satır isteğe bağlı bir komut ve ardından özel yönlendirme operatörü << ve sınırlayıcı tanımlayıcı ile başlar.
    • Herhangi bir dizeyi sınırlayıcı tanımlayıcı olarak kullanabilirsiniz, en yaygın olarak kullanılan EOF veya END'tir. Sınırlayıcı tanımlayıcı belirtilmemişse, kabuk, burada belge satırlarını komuta iletmeden önce tüm değişkenleri, komutları ve özel karakterleri değiştirir. yönlendirme operatörüne eksi işareti <<- , tüm önde gelen sekme karakterlerinin yok sayılmasına neden olur. Bu, burada belgeleri kabuk komut dosyalarına yazarken girinti kullanmanıza izin verir. Baştaki boşluk karakterlerine izin verilmez, yalnızca sekme.
    Buradaki belge bloğu dizeleri, değişkenleri, komutları ve diğer herhangi bir girdi türünü içerebilir.Son satır sınırlayıcı tanımlayıcı ile biter. Sınırlayıcının önünde beyaz boşluk bırakılmaz.

Temel Yorumlu Örnekler

Bu bölümde, heredoc'un nasıl kullanılacağına dair bazı temel örneklere bakacağız.

Yorumlu metin çoğunlukla kedi komutu ile birlikte kullanılır.

Aşağıdaki örnekte, burada bir belge kullanarak bir ortam değişkeni ve bir komut içeren iki metin satırı geçiyoruz.

cat << EOF The current working directory is: $PWD You are logged in as: $(whoami) EOF

Aşağıdaki çıktıdan da görebileceğiniz gibi, hem değişken hem de komut çıkışı ikame edilir:

The current working directory is: /home/linuxize You are logged in as: linuxize

Sınırlayıcıyı tek veya çift tırnak içine alırsak ne olacağını görelim.

cat <<- "EOF" The current working directory is: $PWD You are logged in as: $(whoami) EOF

Sınırlayıcı belirtildiğinde, kabuk tarafından parametre genişletme ve komut ikamesi yapılmadığını fark edebilirsiniz.

The current working directory is: $PWD You are logged in as: $(whoami)

if true; then cat <<- EOF Line with a leading tab. EOF fi

Line with a leading tab.

Çıktıyı ekranda görüntülemek yerine, > , >> işleçlerini kullanarak bir dosyaya yeniden yönlendirebilirsiniz.

cat << EOF > file.txt The current working directory is: $PWD You are logged in as: $(whoami) EOF

File.txt mevcut değilse oluşturulur. > Kullanılırken dosyanın üzerine yazılırken, >> çıktıyı dosyaya ekler.

Yorumlu metin girişi de borulanabilir. Aşağıdaki örnekte sed komutu, l karakterinin tüm örneklerini e :

cat <<'EOF' | sed 's/l/e/g' Hello World EOF

Heeeo Wored

Borulu verileri bir dosyaya yazmak için:

cat <<'EOF' | sed 's/l/e/g' > file.txt Hello World EOF

Heredoc'u SSH ile kullanma

Heredoc kullanmak, SSH üzerinden uzak bir sistemde birden fazla komut yürütmenin en uygun ve en kolay yollarından biridir.

Sıralanmamış sınırlayıcı kullanırken, tüm değişkenlerden, komutlardan ve özel karakterlerden kaçtığınızdan emin olun, aksi takdirde bunlar yerel olarak enterpole edilir:

ssh -T [email protected] << EOF echo "The current local working directory is: $PWD" echo "The current remote working directory is: \$PWD" EOF

The current local working directory is: /home/linuxize The current remote working directory is: /home/user

Ayrıca, bir SSH anahtar tabanlı kimlik doğrulaması ayarlamak ve bir şifre girmeden Linux sunucularınıza bağlanmak isteyebilirsiniz.

Sonuç

Bu kılavuzda, heredoc ne olduğunu ve kabuk komut dosyalarınızda nasıl kullanılacağını öğrendiniz.

bash terminali