GNU/Linux >> Belajar Linux >  >> Linux

Skrip Bash:Menggunakan perintah skrip dari skrip bash untuk mencatat sesi

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:

  1. mulai script . ini memunculkan shell baru.
  2. lakukan perintah di shell baru.
  3. keluar dari shell dan jatuhkan ke shell sebelumnya
  4. 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 logfile
  • set -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.


Linux
  1. Menggunakan perintah passwd dari dalam skrip shell

  2. Jalankan skrip bash dari URL

  3. mengotomatiskan sesi telnet menggunakan skrip bash

  1. Menggunakan Bash untuk otomatisasi

  2. Mulai untuk Loop dari elemen kedua - skrip Shell

  3. Bagaimana cara menemukan bantuan untuk perintah titik `.` di * nix?

  1. Ssh – Skrip Shell Untuk Masuk Ke Server Ssh?

  2. Bagaimana Mengenalinya Jika Saya Dalam Sesi Tmux Dari Skrip Bash?

  3. Proses Dalam Sesi Dalam Shell Interaktif Vs Dalam Skrip?