Bash betiklerini çalıştırmadan önce her komutu nasıl yazdırır?


Yanıtlar:


110
bash -x script

veya

set -x

senaryoda.

Seçeneği tekrar ile ayarlayabilirsiniz set +x. Sadece birkaç komut için yapmak istiyorsanız, bir alt kabuk kullanabilirsiniz: `(set -x; command1; command; ...;)


Bunu her zaman büyük etki için kullandım. Çıktı beklediğinizden biraz daha kirli görünüyor.
Scott Pack

2
Ayarlayarak PS4size istemi çimdik -x. Örneğin: PS4='Line $LINENO @ $(date +%s.%N): ' bash -x script( dateyavaşlar olsa da)
Walter Tross

23

Bunlar da işe yarar:

set -v

veya

#!/bin/bash -v

Ancak -v, PS4 dizesini her komut satırından önce yazdırmaz ve bir "for" ifadesinin (örneğin) adımlarını ayrı ayrı izlemez. -X olmasa da yorumlar eko yapar.

İşte -v kullanarak çıktının bir örneği:

#!/bin/bash -v
# this is a comment
for i in {1..4}
do
    echo -n $i
done
1234echo

echo hello
hello

İşte -x ile aynı betiğin sonucu:

+ for i in '{1..4}'
+ echo -n 1
1+ for i in '{1..4}'
+ echo -n 2
2+ for i in '{1..4}'
+ echo -n 3
3+ for i in '{1..4}'
+ echo -n 4
4+ echo

+ echo hello
hello

-V ve -x arasındaki farklara vurgu eklemek için "echo -n" yi dahil ettiğime dikkat edin. Ayrıca, -v "-o ayrıntılı" ile aynıdır, ancak ikincisi bir shebangın bir parçası olarak çalışmıyor gibi görünüyor.


Harika bir açıklama! Herhangi bir araştırma yapmadan bana öyle geliyor ki Verbose ve eXplicit bu iki harfin neyi temsil ettiğini gösteriyor.
Ape-inago

Bence -x eXecute'a daha yakın.
Steven Parkes

10

Bu da çalışması gerekir:

#!/bin/bash -x
cd ~/hello
ls

6

Bu çalışmalı:

set -o verbose #echo on
...
set +o verbose #echo off

4

set -o xtraceve set +o xtracearkadaşlarınız (bundan daha ayrıntılı, -o verboseve çıktı, STDOUT'a giriş yapmış gibi ayrıntılı olanın aksine, STDERR'ye gidiyor).

Burada daha fazla ipucuna bakın


3

Birkaç yol var.

#!/usr/bin/env bash -x

Shebang hattı olarak.

set -xKomut dosyasına kendisi dahil etmek, işlevi set +xdevre dışı bırakacak şekilde etkinleştirir . Bu yöntemlerin her ikisi de daha taşınabilir sh kabuğu ile çalışacaktır.

Doğru hatırlıyorsam perl de -x seçeneğine sahiptir.


1

gibi gider

language -x script

dil = python, perl, bash -x = işleç komut dosyası = dosyaadı

Umarım yardımcı olur.


3
-xPython'da yankılanma ile ilgisi yok
Eugene Pankov

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.