İşte basit bir bash betiği örneği.
# Assign values to variables locally.
myvar1="myvalue1"
myvar2="myvalue2"
# Add your local commands here.
ssh myremotehost "$(
cat <<HEREDOC_EXPORT_VARIABLES
export myvar1="$myvar1"
export myvar2="$myvar2"
HEREDOC_EXPORT_VARIABLES
cat <<'HEREDOC_SUDO'
sudo -Eu root /bin/bash <<'HEREDOC_COMMANDS'
# Optionally display your variables.
echo "myvar1: $myvar1"
echo "myvar2: $myvar2"
# Add your remote commands here.
HEREDOC_COMMANDS
HEREDOC_SUDO
)" | tee logfile.log
Farklı parçaların açıklanması.
Yerel olarak atanmış değerler (değişkenler uzak makinede komutları çalıştırmadan önce):
myvar1="myvalue1"
myvar2="myvalue2"
"$(... )"birden fazla komutun birlikte gruplanmasına izin verin ve bu satırda çift tırnak kullanılmasına izin verin.
Burada tek tırnak içinde olmayan belge bloğunu dışa aktar, blokta yerel değişkenlerin kullanılmasına izin verir:
cat <<HEREDOC_EXPORT_VARIABLES
...
...
HEREDOC_EXPORT_VARIABLES
Uzak komutlar için yerel değişkenlerin dışa aktarılması.
export myvar1="$myvar1"
export myvar2="$myvar2"
Tek tırnak içine alınmış dış burada-belge bloğu, sudo komutunu dışlamak ve iç burada-belge için uzak değişkenlerden kaçma gerekliliğini ortadan kaldırmak için kullanılır (potansiyel olarak echosatır beslemesi olmadan değiştirilebilir ):
cat <<'HEREDOC_SUDO'
...
...
HEREDOC_SUDO
Uzak değişkenlerden kaçma zorunluluğunu ortadan kaldırmak için burada tek tırnak içinde bulunan iç belge bloğu.
sudo -Eu root /bin/bash <<'HEREDOC_COMMANDS'
...
...
HEREDOC_COMMANDS
-EBu seçenek, sudodaha önce dışa aktarılan çevre değişkenlerinin korunmasına izin verir.
tee logfile.log aynı anda hem terminale hem de bir günlük dosyasına eko çıkışı sağlar.
Bir bonus olarak, ssh myremotehost "$(çizgiyi değiştirebilir echo "$(ve uzaktan yürütülen parçanızın hata ayıklama amacıyla nasıl görüneceğinin bir çıktısını alacaksınız.
İpucu: Bir yorumda kullansanız bile "$(... )"blok içinde eşleştirilmemiş tek veya çift alıntıdan kaçmanız gerekebilir .