Usando alias em outro script (ksh)

2

Estou escrevendo um script ksh e gostaria de usar um comando definido por um alias no meu arquivo .profile , no meu script. Eu tentei este comando na pasta que contém o meu script e funciona. No entanto, no meu script, eu tenho: [command] not found .

Como posso resolver isso? Meu comando só faz um ls de um repositório, então eu estou fazendo no meu script:

[command]| grep ... | { IFS== read -r var1 x && IFS== read -r var2 x; }
    
por user1058398 18.11.2013 / 16:52

1 resposta

1

Não use aliases nos seus scripts. Esta é uma má ideia exatamente por este motivo. Existem várias maneiras de contornar isso:

  • Defina o alias no próprio script
  • Origem do arquivo que contém o alias do script. Adicione esta linha a ela:

    . /home/your_user/.profile
    
  • Use o comando em vez do alias. Por exemplo, se você tiver alias foo="echo bar" , use echo bar em seu script em vez de foo .

Como regra geral, é uma má ideia definir aliases em .profile . Esse arquivo é lido apenas por shells de login, não por interativos e não quando executando scripts. Para tornar seus aliases facilmente acessíveis, você deve adicioná-los a $HOME/.kshrc . O seguinte é de man ksh :

If the shell is invoked by exec(2), and the first character of argument zero ($0) is -, then the shell is assumed to be a login shell and commands are read from /etc/profile and then from either .profile in the current directory or $HOME/.profile, if either file exists. Next, for interactive shells, commands are read from the file named by performing parameter expansion, command substitution, and arithmetic substitution on the value of the environment variable ENV if the file exists.

Em outras palavras, os shells de login leem /etc/profile e .profile enquanto os shells interativos (o que você obtém ao abrir um terminal) lêem o que estiver na variável $ENV ou, se não estiver definido, ~/.kshrc . Isso significa que os aliases em seu .profile serão lidos apenas ao digitar na máquina ou iniciar um shell de login.

    
por 19.11.2013 / 14:45