Saya memiliki skrip launch.sh
yang mengeksekusi dirinya sebagai pengguna lain untuk membuat file dengan pemilik yang benar. Saya ingin meneruskan -x ke doa ini jika awalnya dilewatkan ke skrip
if [ `whoami` == "deployuser" ]; then
... bunch of commands that need files to be created as deployuser
else
echo "Respawning myself as the deployment user... #Inception"
echo "Called with: <$BASH_ARGV>, <$BASH_EXECUTION_STRING>, <$->"
sudo -u deployuser -H bash $0 "$@" # How to pass -x here if it was passed to the script initially?
fi
Saya telah membaca halaman debugging bash tetapi tampaknya tidak ada opsi yang jelas yang memberitahukan apakah skrip asli diluncurkan -x
.
[[ $- == *x* ]]
untuk pencocokan pola.case $- in *x*) ... ;; *) ... ;; esac
. Sangat berguna untuk mengetahui penggunaancase
skrip yang dimaksudkan untuk portabel, dan sekarang saya mengetahuinya, saya merasa lebih mudah untuk hanya mengingatnya, daripada mengingat "jika spesifik bash, lalu[[
, laincase
".$-
outputhB
. Apa yang dilakukan oleh flag-h
dan-B
argumen? Jangan lihat di halaman bash man .set -o
akan ditampilkanxtrace on
jika-x
digunakan, jika tidakxtrace off
.sumber
Meskipun jawaban @Patrick adalah jawaban yang "benar", Anda juga dapat hanya meneruskan parameter atau variabel yang diekspor ke skrip anak Anda yang memberi tahu apa yang harus dilakukan - seperti mengaktifkan penelusuran.
Ini memiliki kelemahan yaitu (saya percaya) Anda harus mengekspornya kembali ke setiap tingkat skrip yang akan Anda masuki.
Ini memiliki keuntungan karena dapat secara selektif melacak (atau memengaruhi) hanya skrip (s) yang Anda perlukan dari perilaku keluaran / modifikasi - untuk mengurangi keluaran asing, dll. Misalnya pelacakan dapat dinonaktifkan untuk skrip panggilan dan masih bisa diaktifkan dalam skrip yang dipanggil. Itu bukan proposisi semua atau tidak sama sekali.
Bukan bagian dari pertanyaan Anda, tetapi terkait:
Saya terkadang mendefinisikan variabel like
atau
dan menggunakannya (dalam banyak pernyataan) seperti
atau, hanya untuk variasi kedua,
Kemudian, saya hanya mengomentari definisi kedua ketika saya ingin perintah dijalankan. Anda juga bisa menggunakan teknik ini dengan parameter atau variabel yang diekspor.
Dengan salah satu dari ini, Anda harus berhati-hati terhadap pernyataan majemuk karena metode ini hanya dijamin untuk bekerja pada pernyataan pertama dalam daftar majemuk.
sumber
Anda bisa mengambil PID dari proses dan kemudian memeriksa tabel proses dengan ps untuk melihat apa argumennya.
sumber
-x
diatur di dalam skrip, itu tidak akan ditampilkan dalamps
output. Dan solusi ini tidak efisien.set -o
solusi yang saya usulkan. Ini juga harus berfungsi untuk opsi yang tidak memiliki flag terkait-x
.