Variáveis de ambiente Unix com argumentos

7

Estou tentando definir minha variável $ EDITOR como emacs sem janela, portanto, o comando para chamá-la seria emacs -nw . No entanto, se eu definir assim:

export EDITOR="/Applications/Emacs.app/Contents/MacOS/Emacs -nw"

Eu recebo o seguinte erro

zsh: no such file or directory: /Applications/Emacs.app/Contents/MacOS/Emacs -n

    
por bneil 18.12.2012 / 15:59

2 respostas

6

Acredito que isso não funcione porque o shell tentaria abrir um binário com o espaço incluído no nome do arquivo, portanto, Emacs -nw e não abrir Emacs e, em seguida, passar -nw como as opções. / p>

Que tal tornar $EDITOR um pequeno script (executável), por ex. em ~/bin/EDITOR ?

#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs -nw -- "$@"

Em seguida, basta adicionar à configuração do seu shell:

export EDITOR=~/bin/EDITOR

Agora, EDITOR chamará o script com os argumentos apropriados, expandidos em $@ .

    
por 18.12.2012 / 16:25
5

Como explicado aqui: zsh: Comando não encontrado (para $ EDITOR) , o zsh trata a variável expandida como uma única palavra (que contém caracteres de espaço).

Possíveis soluções são:

  • executado no bash que expande os espaços corretamente

  • Use o modificador '=' na expansão de parâmetros: consulte Expansão na documentação zsh e procure por '$ {= spec}'

  • use eval ao chamar $ EDITOR como em:

    eval $EDITOR file

por 18.12.2012 / 16:27