pengembangan-web-mp-pd.com

Bagaimana membuat skrip bash mencetak setiap perintah sebelum dijalankan?

Misalnya, saya punya file bash sederhana

#!/bin/bash
cd ~/hello
ls

Bagaimana saya membuatnya menampilkan setiap perintah sebelum menjalankannya? Efek sebaliknya dari "@echo off" di skrip batch windows.

90
Epeius
bash -x script

atau

set -x

dalam naskah.

Anda dapat menghapus opsi lagi dengan set +x. Jika Anda hanya ingin melakukannya untuk beberapa perintah, Anda dapat menggunakan subshell: `(set -x; command1; command; ...;)

114
Steven Parkes

Ini juga berfungsi:

set -v

atau

#!/bin/bash -v

Tapi -v tidak mencetak string PS4 sebelum setiap baris skrip dan itu tidak melacak langkah-langkah pernyataan "untuk" (misalnya) secara individual. Itu gema komentar sementara -x tidak.

Berikut ini contoh output menggunakan -v:

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

echo hello
hello

Inilah hasil skrip yang sama dengan -x:

+ 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

Perhatikan bahwa saya memasukkan "echo -n" untuk menambahkan penekanan pada perbedaan antara -v dan -x. Juga, -v sama dengan "-o verbose", tetapi yang terakhir tampaknya tidak berfungsi sebagai bagian dari Shebang.

Ini juga harus bekerja:

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

Ini seharusnya bekerja:

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

set -o xtrace dan set +o xtrace adalah teman Anda (ini lebih bertele-tele, dari -o verbose, dan hasilnya menuju ke STDERR, dan bukan verbose, yang sepertinya masuk ke STDOUT).

Lihat lebih banyak tips di sini

4
pihentagy

Ada beberapa cara.

#!/usr/bin/env bash -x

sebagai garis Shebang.

Termasuk set -x dalam skrip itu sendiri akan mengaktifkan fungsionalitas sementara set +x akan menonaktifkannya. Kedua metode ini juga akan bekerja dengan Shell sh yang lebih portabel.

Jika saya ingat dengan benar, Perl juga memiliki opsi -x.

3
user6784

berjalan seperti

language -x script

bahasa = python, Perl, bash -x = skrip operator = nama file

semoga membantu.

1
debuggerpk

#! /bin/bash -x melakukan apa yang Anda inginkan.

0
Rory