2013-09-18 3 views
3

В zsh есть способ отключить интерактивный режим (в частности, псевдонимы) внутри скрипта, который был получен в интерактивном режиме?Есть ли способ подавить интерактивный режим в zsh?

Например, если я определяю в foo.zsh:

#!/bin/zsh 

a ha 

, а затем сделать

alias a=echo 
./foo.zsh 

Я получаю сообщение об ошибке, потому что псевдоним не применяется; но если у меня есть

. ./foo.zsh 

Я получаю ha.

Есть способ, в пределах foo.zsh, чтобы отключить псевдоним a, даже если он был получен с помощью .?

+1

Оболочка работает скрипт всегда неинтерактивная оболочка. Тем не менее, скрипт может получить доступ к его tty. Можно даже эмулировать интерактивную оболочку в скрипте - [источник] (http://www.tldp.org/LDP/abs/html/intandnonint.html). Из [этого ответа] (http://superuser.com/questions/46139/what-does-source-do) вы пытаетесь запустить скрипт * в текущей оболочке *, в то же время * не желая скрипт в текущей оболочке *. Использовать 'source' абсолютно необходимо? Что вы пытаетесь сделать (это учебное упражнение, или задача требует «источник»)? – simont

+0

@simont Я использую [подсказку git-подсказки Себастьяна Селиса] (http://sebastiancelis.com/2009/11/16/zsh-prompt-git-users/), и каждый раз через некоторое время я разбиваю ее, определяя новую псевдоним в моем .zshrc. – Owen

ответ

1

Это подтверждается довольно ясно в руководстве:

INTERACTIVE (-i, ksh: -i) 
    This is an interactive shell. This option is set upon 
    initialisation if the standard input is a tty and commands are 
    being read from standard input. (See the discussion of 
    SHIN_STDIN.) This heuristic may be overridden by specifying a 
    state for this option on the command line. The value of this 
    option can only be changed via flags supplied at invocation of the 
    shell. It cannot be changed once zsh is running. 

но вам не нужно, чтобы выключить интерактивный режим только для предотвращения псевдоним расширения:

$ setopt no_aliases 
$ . ./foo.zsh 
./foo.zsh:3: command not found: a 
$ setopt aliases 
$ . ./foo.zsh 
ha 
Смежные вопросы