-1

script.shという名前のLinuxでシェルスクリプトを作成しました。実行時に「script -a record.txt」コマンドを呼び出し、record.txt というファイルに端末のキャプチャを作成するとします。

#!/bin/bash

script -a record.txt

mkdir folder

このscript.shファイルを実行すると、record.txtファイルが作成されますが、コンテンツ「mkdirフォルダー」はそこに記録されません。「mkdir folder」コマンドが無視されたため、新しいディレクトリを作成できませんでした。誰もこれを修正する方法を知っていますか?

4

2 に答える 2

1

TLDR: スクリプト コマンドは、$SHELL の値に従ってサブシェルをフォークして作成し、このセッションからのテキストを記録します。

Ctrl + Dまたはexit、script.sh ファイルの実行が終了した後に終了scriptする必要があります。

scriptマニュアルページから( http://man7.org/linux/man-pages/man1/script.1.html )

script は、端末に出力されるすべてのタイプスクリプトを作成します。

分岐したシェルが終了すると (Bourne シェルを終了するための control-D (sh(1))、C シェルの終了、ログアウト、または control-d (ignoreeof が設定されていない場合)、csh(1)) でスクリプトが終了します。 )。

したがって、そうする場合

#!/bin/bash
script -a record.txt
mkdir folder
ls

次に、個別にフォークされたサブシェルにいるため、mkdir コマンドは実行されません。ctrl + D、 またはを使用して終了するとexitmkdirが自動的に実行され、必要なフォルダが作成されます。

ただし、ls は元のシェルで実行され、スクリプトによって作成されたサブシェルでは実行されないため、 command の出力、または コマンドとコマンドlsの発行はrecord.txt ファイルに記録されません。mkdirls

于 2013-09-30T09:56:39.040 に答える
0

わかった

#!/bin/bash
function one {

mkdir folder
}

one | tee record.txt
于 2013-09-30T13:06:42.053 に答える