GNU/Linux >> Znalost Linux >  >> Linux

Bash skript:Použití příkazu script z bash skriptu pro protokolování relace

Váš skript shellu nebyl ukončen. Stále běží. Zobrazuje se vám výzva, protože script plodí novou skořápku. výzva, kterou vidíte, je výzva z vytvořeného shellu.

Normální případ použití pro script je něco takového:

  1. začátek script . tím se vytvoří nová skořápka.
  2. provádět příkazy v novém prostředí.
  3. opusťte shell a přejděte na předchozí shell
  4. prohlédněte si soubor protokolu vytvořený script

Takže v podstatě script funguje podle očekávání. Budete muset najít jiný způsob, jak dosáhnout toho, co chcete.

Spuštění skriptu můžete zaznamenat takto:

#! /bin/bash
exec > logfile 2>&1
set -x
FOO=BAR
echo $FOO

Vysvětlení:

  • exec > logfile 2>&1 přesměruje stdout a stderr do logfile
  • set -x způsobí, že bash vytiskne každý příkaz před jeho provedením

Příklad:

$ ./foo.sh
  # (no output here because everything goes to logfile)
$ cat logfile 
+ FOO=BAR
+ echo BAR
BAR

Nevýhodou této metody je, že skript nevytiskne žádný výstup, který by lidé viděli. Vše jde do logfile.

Případně to můžete udělat takto:

#! /bin/bash
# nothing special here
FOO=BAR
echo $FOO

Poté proveďte takto:

$ script -c "bash -x foo.sh"
Script started, file is typescript
+ FOO=BAR
+ echo BAR
BAR
Script done, file is typescript

nyní je výstup přímo viditelný a také uložený do logfile (výchozí název logfile je 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

Váš bash skript stále běží, ale vytvořil nový interaktivní shell. Bash skript čeká na script dokončit, což se stane pouze po ukončení interaktivního shellu (buď zabitím, nebo zadáním exit uživatelem ).

Chcete-li provést příkaz po script být přihlášen pomocí script , udělejte to takto:

script build_log -c 'echo -e "* This line should appear inside the /"build_log/" log file..."'

Nicméně script po spuštění tohoto příkazu se zastaví.

Chcete-li spustit více příkazů uvnitř script , vložte tyto příkazy do jiného bash skriptu a určete tento bash skript jako příkaz ke spuštění na -c možnost.


Linux
  1. Použití příkazu passwd ze skriptu shellu

  2. Spusťte bash skript z adresy URL

  3. automatizace relace telnet pomocí bash skriptů

  1. Spuštění pro smyčku z druhého prvku - skript Shell

  2. Spusťte skript prostředí z příkazu docker-compose uvnitř kontejneru

  3. Jak najdu nápovědu pro bodový příkaz `.` v *nix?

  1. Ssh – Shell skript pro přihlášení na Ssh server?

  2. Jak zjistit, zda jsem v relaci Tmux ze skriptu Bash?

  3. Procesy v relaci v interaktivním prostředí versus ve skriptu?