5

UNIXの「/usr/ bin / script」コマンドは、シェルセッションの実行中のトランスクリプトを作成します(詳細については、「manscript」を参照してください)。

ただし、スクリプトインスタンスでは、親シェルのenv変数、エイリアスなどを忘れているようです。

次の例は、私が定義した「ll」エイリアスが「script」内で無視される方法を示しています。

zsh> mkdir temp
zsh> cd temp

zsh> alias "ll=ls -alF"

zsh> ll
total 24
drwxr-xr-x   2 me   mygroup    4096 Feb 18 13:32 ./
drwxr-xr-x  28 me   mygroup    8192 Feb 18 13:32 ../

zsh> script a.out
Script started, file is a.out

$ ll

zsh: command not found: ll
$ exit
Script done, file is a.out

zsh> ll
total 32
drwxr-xr-x   2 me   mygroup    4096 Feb 18 13:32 ./
drwxr-xr-x  28 me   mygroup    8192 Feb 18 13:32 ../
-rw-r--r--   1 me   mygroup     182 Feb 18 13:32 a.out

では、親シェルからenv設定を継承する「スクリプト」プロセスを取得するにはどうすればよいですか?

[編集:]さて、env変数は忘れられていません。エイリアスだけ。.profileまたは何かを再調達することは機能します...しかし、どうすればそれを自動的に実現できますか?

4

4 に答える 4

1

エイリアスは環境変数ではありません。.profileエイリアスを設定した場所、またはどこからでも調達できます。$SHELL環境変数も見てください。

scriptコマンドはそれほど複雑ではありません。複製して期待どおりに機能させることはそれほど難しくありません。

于 2009-02-18T18:54:41.513 に答える
1

bashで起動すると正常に動作します。おそらく、zsh の構成に問題があるか、zsh の起動ファイルをソースしていない可能性があります。あなたが試すことができます: script -c zsh

これにより、新しい zsh シェルが強制的に起動され、zsh 構成ファイルが読み込まれる場合があります。

于 2009-02-18T19:37:12.690 に答える
0

Jon Ericson が指摘したように、エイリアスは環境の一部ではありません。スクリプトですべての環境を見つけることができます。

スクリプト内のすべてのエイリアスを取得するには、それらをファイルに保存してから再読み込みします。

    $ エイリアス myls="ls -lCF"
    $ エイリアス -L >/tmp/alias.zsh
    $スクリプト
    $ . /tmp/alias.zsh
    $ミルズ

エイリアスをホームディレクトリにあるファイルに置くと、.zshrc自動的にロードされます。

于 2009-02-18T19:01:18.673 に答える