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:
- začátek
script
. tím se vytvoří nová skořápka. - provádět příkazy v novém prostředí.
- opusťte shell a přejděte na předchozí shell
- 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 logfileset -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.