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>&1přesměruje stdout a stderr do logfileset -xzpů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.