5

UNIX "/usr/bin/script" 命令将创建您的 shell 会话的运行脚本(有关更多信息,请参见“man script”)。

但是,当脚本实例中时,它似乎忘记了父 shell 的环境变量、别名等。

以下示例演示了我定义的“ll”别名如何在“脚本”中被忽略:

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

那么,如何让“脚本”进程从父 shell 继承环境设置?

[编辑:] 好的,环境变量不会被遗忘。只是别名。重新采购 .profile 或其他东西会起作用......但我怎样才能让它自动发生?

4

4 回答 4

1

别名不是环境变量。您可以获取您的.profile或您设置别名的任何位置。另请查看 $SHELL 环境变量。

script命令并不十分复杂。复制并使其按您期望的方式工作并不难。

于 2009-02-18T18:54:41.513 回答
1

当我在 bash 下启动它时它工作正常。也许你的 zsh 配置中有一些东西把它搞砸了,或者它没有获取你的 zsh 的启动文件。你可以试试: script -c zsh

这可能会迫使它启动一个新的 zsh shell 并让它获取你的 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 回答
0

对于 zsh 别名的特定情况……如果您将别名放在 .zshenv(而不是 .zshrc)中,则应自动代表您执行。

我知道这是一个旧线程,但有时人们会阅读旧线程;>

alias foo='print FOO'
[khb@vm]~% foo
FOO
[khb@vm]~% script
Script started, file is typescript
[khb@vm]~% foo
zsh: command not found: foo
zsh: use 'exit' to exit.
[khb@vm]~% exit
Script done, file is typescript
[khb@vm]~% mv .bork .zshenv
[khb@vm]~% foo
FOO
[khb@vm]~% script
Script started, file is typescript
[khb@vm]~% foo
FOO
[khb@vm]~% 
 zsh: use 'exit' to exit.
Script done, file is typescript
[khb@vm]~% 
于 2015-05-28T19:55:12.997 回答