Skrip shell Anda tidak berhenti. Itu masih berjalan. Anda mendapatkan prompt karena script
sedang menelurkan cangkang baru. prompt yang Anda lihat adalah prompt dari shell yang dimunculkan.
Kasus penggunaan normal untuk script
adalah sesuatu seperti ini:
- mulai
script
. ini memunculkan shell baru. - lakukan perintah di shell baru.
- keluar dari shell dan jatuhkan ke shell sebelumnya
- periksa file log yang dibuat oleh
script
Jadi pada dasarnya script
bekerja seperti yang diharapkan. Anda harus menemukan cara lain untuk mencapai apa yang Anda inginkan.
Anda dapat mencatat eksekusi skrip Anda seperti ini:
#! /bin/bash
exec > logfile 2>&1
set -x
FOO=BAR
echo $FOO
Penjelasan:
exec > logfile 2>&1
mengalihkan stdout dan stderr ke logfileset -x
membuat bash mencetak setiap perintah sebelum menjalankannya
Contoh:
$ ./foo.sh
# (no output here because everything goes to logfile)
$ cat logfile
+ FOO=BAR
+ echo BAR
BAR
Kerugian dari metode ini adalah skrip tidak mencetak keluaran untuk dilihat manusia. Semuanya masuk ke file log.
Atau Anda dapat melakukannya seperti ini:
#! /bin/bash
# nothing special here
FOO=BAR
echo $FOO
Kemudian jalankan seperti ini:
$ script -c "bash -x foo.sh"
Script started, file is typescript
+ FOO=BAR
+ echo BAR
BAR
Script done, file is typescript
sekarang keluaran langsung terlihat dan juga disimpan ke file log (nama default file log adalah typescript
)
$ cat typescript
Script started on Mi 18 Mai 2011 01:05:29 CEST
+ FOO=BAR
+ echo BAR
BAR
Script done on Mi 18 Mai 2011 01:05:29 CEST
Skrip bash Anda masih berjalan, tetapi telah melahirkan shell interaktif baru. Skrip bash sedang menunggu script
untuk menyelesaikan, yang hanya akan terjadi ketika shell interaktif diakhiri (baik dengan dibunuh, atau oleh pengguna yang mengetik exit
).
Untuk membuat perintah setelah script
dicatat oleh script
, lakukan seperti ini:
script build_log -c 'echo -e "* This line should appear inside the /"build_log/" log file..."'
Namun, script
akan berhenti berjalan setelah menjalankan perintah itu.
Untuk menjalankan banyak perintah di dalam script
, letakkan perintah tersebut di dalam skrip bash lain dan tentukan skrip bash tersebut sebagai perintah untuk dijalankan ke -c
opsi.