Saya sedang men-debug skrip di DASH SHELL dengan menggunakan #!/bin/sh -x dan saya ingin menunjukkan nomor baris skrip saat men-debug.

Sudah mencoba mengubah variabel PS4 (seperti yang ditunjukkan dalam jawaban ini), tidak berhasil karena hanya berfungsi di bash, saya perlu Shell.

PS4='Line ${LINENO}: '

Saya mengharapkan output berikut:

123: + echo test

Tapi tidak ada apa-apa di $LINENO di shell.

Saya menggunakan ubuntu 16.04 x64 dan versi dasbor 0.5.8-2.1ubuntu2 500

Secara khusus saya mencoba men-debug file konfigurasi Virtualbox untuk membangunnya di linux. Berikut adalah beberapa bagian dari script dan bagaimana saya mencoba.

 #!/bin/sh -x
PS4='Line ${LINENO}: '
LC_ALL=C
export LC_ALL

# append some extra paths
PATH="$PATH:/opt/gnome/bin"
# Solaris (order of paths important for tr, grep, sed to work)
PATH="/usr/xpg4/bin:$PATH:/usr/local/bin:/usr/sfw/bin:/usr/ccs/bin"
ORGPATH=$PATH
...
    echo "  disabled hardening!"
    echo "  +++ WARNING +++ WARNING +++ WARNING +++ WARNING +++ WARNING +++ WARNING +++"
    echo ""
fi
echo "Enjoy!"
cleanup

Hasilnya adalah:

Line : [ 1 -ne 0 ]
Line : test -z nofatal
Line : echo
Line : echo
Line : return 1
1
Sunfloro 1 April 2019, 18:22

1 menjawab

Jawaban Terbaik

Semua fungsi yang dibahas di sini sudah diperlukan dalam lampiran Utilitas Portabilitas Pengguna pada standar POSIX.

Selain itu, tanda hubung, implementasi /bin/sh non-bash paling umum di Linux, sudah memiliki fungsionalitas bawaan, seperti yang dapat Anda uji di bawah ini:

dash -s <<'EOF'
PS4=':$LINENO+'; set -x
echo "First line"
echo "Second line"
EOF

... memancarkan dengan benar (dengan tanda hubung 0.5.10.2):

:2+echo First line
First line
:3+echo Second line
Second line
1
Charles Duffy 1 April 2019, 16:00