The $?
variabel menyandang status keluar dari perintah terakhir dijalankan. Apakah ada variabel yang memegang perintah jalankan terakhir itu sendiri?
bash
shell
scripting
environment-variables
Eimantas
sumber
sumber
Jawaban:
Gunakan
fc
untuk mendapatkan baris perintah sebelumnya. Ini biasanya digunakan untuk mengedit baris perintah sebelumnya di editor favorit Anda, tetapi juga memiliki mode "daftar":last_command="$(fc -nl -1)"
sumber
caller
dan array pestaBASH_LINENO
,BASH_SOURCE
danFUNCNAME
melakukan semacam jejak stack.Jika perintah terakhir dijalankan tanpa argumen, itu akan disimpan dalam
$_
variabel. Ini biasanya berisi argumen terakhir dari perintah sebelumnya - jadi jika tidak ada argumen, nilai dari$_
adalah perintah terakhir itu sendiri.Opsi lain adalah mempelajari detail perintah latar belakang terakhir . Sebagai l0b0 menulis,
$!
memegang PID-nya - sehingga Anda dapat mengurai outputps $!
(mungkin dengan opsi format tambahan untukps
).sumber
Tidak, tetapi Anda bisa mendapatkannya selama eksekusi untuk menyimpan perintah lain:
$0
: Jalur skrip shell saat ini.$FUNCNAME
: "Nama fungsi saat ini.""$@"
: Semua parameter dari perintah saat ini, dikutip secara terpisah.$!
: "PID (ID proses) pekerjaan terakhir yang berjalan di latar belakang."$$
: "ID Proses (PID) dari skrip itu sendiri."Perintah lengkap dari skrip saat ini seharusnya
"$0" "$@"
. Jika itu adalah fungsi seharusnya"$FUNCNAME" "$@"
. Anda mungkin ingin menyimpannya dalam array untuk diproses di masa mendatang. Misalnya, simpan ini ditest.sh
:Saat berjalan
./test.sh "first argument" "second argument"
, itu harus kembali:Itu adalah panggilan yang setara.
sumber
BASH_COMMAND
variabel, tetapi tampaknya tidak berguna dengan cara apa pun, selain digunakan dalam perangkap.some-command
skrip shell, dan gagal. Saya akan memiliki status bukan nol$?
, akankah "tidak" masih berlaku untuk keberadaan holding variabelsome-command
?The
DEBUG
perangkap memungkinkan Anda menjalankan perintah yang tepat sebelum eksekusi perintah sederhana. Versi string dari perintah untuk mengeksekusi (dengan kata-kata dipisahkan oleh spasi) tersedia dalamBASH_COMMAND
variabel.Catatan yang
previous_command
akan berubah setiap kali Anda menjalankan perintah, jadi simpan ke variabel untuk menggunakannya. Jika Anda ingin mengetahui status pengembalian perintah sebelumnya juga, simpan keduanya dalam satu perintah.Jika Anda hanya ingin membatalkan perintah yang gagal, gunakan
set -e
untuk membuat skrip Anda keluar dari perintah pertama yang gagal. Anda dapat menampilkan perintah terakhir dariEXIT
perangkap .Pendekatan alternatif yang mungkin bisa digunakan untuk beberapa penggunaan adalah menggunakan
set -x
untuk mencetak jejak eksekusi skrip dan memeriksa beberapa baris terakhir jejak.sumber
Saya merasa penting untuk menemukan perintah terakhir yang gagal ketika memiliki
set -e
danset -o pipefail
opsi, karena jika tidak bash hanya dibatalkan tanpa umpan balik tentang mengapa, jadi ini yang saya temukan bekerja dengan baik:Jika Anda menjalankan hal di atas, Anda akhirnya akan melihat semacam keluaran di bawah ini:
Nomor baris mungkin tidak selalu akurat, tetapi harus memberi Anda sesuatu yang cukup dekat untuk berguna.
sumber