Saya sedang menyiapkan skrip shell dengan menu dan sub menu, opsi, dll. Tetapi pada setiap menu / submenu / dll, saya memerlukan pilihan "Kembali ke menu utama".
Saya sudah menyiapkan menu dan berfungsi dengan baik, tetapi saya perlu cara untuk memulai kembali skrip dari awal, mengatur ulang semua variabel dll.
Atau cara untuk keluar dari skrip saat ini dan mulai lagi.
Saya sudah mencoba melakukan ini:
ScriptLoc=$(readlink -f "$0")
./ScriptLoc
Tapi itu memulai skrip "baru" di dalam skrip "lama", jadi ketika saya keluar dari skrip "baru", ia kembali ke skrip "lama" (jika itu masuk akal). Itu adalah skrip di dalam skrip semacam itu.
Adakah yang tahu cara me-restart sepenuhnya?
command-line
scripts
restart
Moonbloom
sumber
sumber
$ScriptLoc
Bagaimanapun juga harusnya :./ScriptLoc
mencari skrip dengan nama itu di direktori saat ini.Jawaban:
Ya, lakukan
Perintah
exec
bash builtin menggantikan program saat ini dengan yang baru.sumber
Anda dapat menggunakan sesuatu seperti ini:
$(basename $0)
akan membuat turunan baru dari skrip saat ini danexit
akan keluar dari turunan skrip saat ini.Berikut ini skrip pengujian yang menyoroti metode di atas:
Jika Anda tidak menggunakan
export count=0
(yang menjadikannyacount
variabel lingkungan) dan hanya menggunakancount=0
(yang membuatcont
variabel skrip lokal), maka skrip tidak akan pernah berhenti.sumber
&& exit
akan keluar hanya jika skrip berhasil. Jadi jika misalnya skrip tidak dapat dieksekusi atau memiliki kesalahan sintaksis, ini kemungkinan hanya berputar.Andal mendapatkan skrip yang saat ini dieksekusi lebih sulit daripada yang Anda bayangkan. Lihat http://mywiki.wooledge.org/BashFAQ/028 .
Sebaliknya, Anda bisa melakukan sesuatu seperti ini:
Pada dasarnya, Anda menjalankan fungsi main_menu dalam subkulit, jadi jika Anda keluar dari main_menu, atau salah satu dari sub menu, Anda keluar dari subkulit, bukan pada shell utama. status keluar 255 dipilih di sini berarti "pergi lagi". Status keluar lain apa pun akan keluar dari loop yang tidak terbatas.
sumber