Bash betimlerinde kuru çalışma uygulama


15

Bir bash betiğinde kuru çalışma seçeneği nasıl uygulanır?

Ben her bir komut bir if sarma ve komut kuru çalışma ile çalışıyorsa, komut yerine yankılanmayı düşünebilirsiniz.

Başka bir yol, bir işlev tanımlamak ve daha sonra her komut çağrısını bu işlevden geçirmek olabilir.

Gibi bir şey:

function _run () {
    if [[ "$DRY_RUN" ]]; then
        echo $@
    else
        $@
    fi
}

`_run mv /tmp/file /tmp/file2`

`DRY_RUN=true _run mv /tmp/file /tmp/file2`

Bu sadece yanlış mı ve bunu yapmanın çok daha iyi bir yolu var mı?


Bu nedenle, komutu gerçekten gerçekleştirmeden komutun ne yapacağını ($ VARIABLES değerleri dahil) yazdırmak istersiniz. _run()Bazen 'set -xv' ile fonksiyonunuz gibi bir şey kullanıyorum , ama daha iyi bir yol isterdim.
Stefan Lasiewski

evet, aynen öyle.
Bash'da

2
Bu sorunun topluluk wiki'si olarak işaretlenmiş olması için hiçbir neden yoktur.
sonraki duyuruya kadar duraklatıldı.

Bash bir kabuktur. Kuru çalışma yapmasının bir nedeni yoktur. Bunu yapmanın şimdiye kadar yaptığınızdan daha iyi bir yolu olduğunu sanmıyorum.
d -_- b

Yanıtlar:


2

Alternatif değil, ancak daha uzun bash programlarını test etmek ve çalışmak için mükemmel bir kaynak gibi görünüyor.
Andrei Serdeliuc

Yanıtımın belirtildiği gibi, tartışmayı belirli bir nasıl yapılır bölümüne işaret etmek yerine bir bütün olarak okumak olduğu için bağlantılı sayfanın belirli bir bölümüne bir çapa ekleyen düzenlemeyi geri aldım. Bağlantılı sayfanın amacı genellikle çok sayıda gotcha olduğu için değişkenlere çalıştırılacak komutlar koymaktan kaçınmaktır.
sonraki duyuruya kadar duraklatıldı.

Bu cevabın bu makalenin belirgin noktalarını özetlemesi çok daha yararlı olacaktır. Bir satır yanıtı hala zayıf yanıtlardır.
Mark Booth

4

@Dennis Williamson'ın cevabı ile oynamak istedim. İşte ne var:

Run () {
    if [ "$TEST" ]; then
        echo "$*"
        return 0
    fi

    eval "$@"
}

eval "$@"Burada önemli olan, ve daha iyi o zaman basitçe yapıyor $*. $@tüm parametreleri ve $*boşluk / tırnak işareti içermeyen tüm parametreleri döndürür.

$ mkdir dir
$ touch dir/file1 dir/file2
$ FOO="dir/*"
$ TEST=true Run ls -l $FOO
ls -l dir/file1 dir/file2
$ Run ls -l $FOO
-rw-r--r--  1 stefanl  stefanl  0 Jun  2 21:06 dir/file1
-rw-r--r--  1 stefanl  stefanl  0 Jun  2 21:06 dir/file2
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.