シェル スクリプトは終了しませんでした。それはまだ実行されています。 script のため、プロンプトが表示されます 新しいシェルを生成しています。表示されるプロンプトは、生成されたシェルからのプロンプトです。
script の通常の使用例 は次のようなものです:
script .これにより、新しいシェルが生成されます。script によって作成されたログファイルを調べる
基本的に script 期待どおりに動作しています。あなたが望むものを達成するには、別の方法を見つける必要があります。
次のようにスクリプトの実行をログに記録できます:
#! /bin/bash
exec > logfile 2>&1
set -x
FOO=BAR
echo $FOO
説明:
exec > logfile 2>&1stdout と stderr をログファイルにリダイレクトset -xコマンドを実行する前に bash にすべてのコマンドを出力させます
例:
$ ./foo.sh
# (no output here because everything goes to logfile)
$ cat logfile
+ FOO=BAR
+ echo BAR
BAR
この方法の欠点は、スクリプトが人間に見える出力を出力しないことです。すべてがログファイルに送られます。
または、次のようにすることもできます:
#! /bin/bash
# nothing special here
FOO=BAR
echo $FOO
次に、次のように実行します:
$ script -c "bash -x foo.sh"
Script started, file is typescript
+ FOO=BAR
+ echo BAR
BAR
Script done, file is typescript
出力が直接表示され、ログファイルにも保存されるようになりました (ログファイルのデフォルト名は 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
bash スクリプトはまだ実行中ですが、新しいインタラクティブ シェルが生成されています。 bash スクリプトは script を待機しています これは、対話型シェルが終了した場合 (強制終了されるか、ユーザーが exit を入力することによって) のみ発生します。 ).
script以降のコマンドを作成するには script によってログに記録されます 、次のようにします:
script build_log -c 'echo -e "* This line should appear inside the /"build_log/" log file..."'
ただし、script そのコマンドを実行した後、実行を停止します。
script 内で複数のコマンドを実行するには 、それらのコマンドを別の bash スクリプト内に配置し、その bash スクリプトを -c に対して実行するコマンドとして指定します。 オプション。