Наследование псевдонимов в UNIX / usr / bin / script - PullRequest
4 голосов
/ 18 февраля 2009

Команда UNIX "/ usr / bin / script" создаст рабочую стенограмму сеанса вашей оболочки (см. "Man script" для получения дополнительной информации).

Однако, когда внутри экземпляра скрипта, он, похоже, забывает переменные 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

Итак, как я могу получить процесс "script" для наследования настроек env от родительской оболочки?

[EDIT:] Хорошо, переменные env не забыты. Просто псевдонимы. Повторное использование .profile или чего-то другого будет работать ... но как я могу сделать так, чтобы автоматически ?

Ответы [ 4 ]

1 голос
/ 18 февраля 2009

Работает нормально, когда я запускаю его под Bash. Возможно, в вашей конфигурации zsh есть что-то испорченное, или оно не использует исходные файлы zsh. Вы можете попробовать: скрипт -c zsh

Что может заставить его запустить новую оболочку zsh и получить исходные файлы конфигурации zsh.

1 голос
/ 18 февраля 2009

Псевдоним не является переменной среды. Вы могли бы получить свой .profile или где-либо еще, вы установили псевдоним. Также взгляните на переменную окружения $ SHELL.

Команда script не очень сложна. Это не будет слишком сложно скопировать и заставить работать так, как вы ожидаете.

0 голосов
/ 28 мая 2015

Для конкретного случая псевдонима для 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]~% 
0 голосов
/ 18 февраля 2009

Как отметил Джон Эриксон, псевдонимы не являются частью среды. Вы найдете всю свою среду в вашем скрипте.

Чтобы получить все псевдонимы в сценарии, вы можете сохранить их в файл, а затем перезагрузить их:

    $ alias myls="ls -lCF"
    $ alias -L >/tmp/alias.zsh
    $ script
    $ . /tmp/alias.zsh
    $ myls

Если вы поместите псевдонимы в файл с именем .zshrc в вашем домашнем каталоге, он будет автоматически загружен.

...