Usando um alias bash ou função com variáveis de ambiente em várias linhas

5

Eu tenho um alias no meu bash_profile que atualmente é uma linha muito longa como esta:

alias staging_server='MY_ENV1="http://example.com" MY_ENV2="http://example2.com" MY_ENV3="http://example3.com" MY_ENV4="http://example4.com" start_server -p 1234'

Existe uma maneira de dividir isso com novas linhas usando uma função ou um alias para torná-lo mais legível? Algo assim (o que parece não funcionar)?

alias staging_server=' \
  MY_ENV1="http://example.com" \
  MY_ENV2="http://example2.com" \
  MY_ENV3="http://example3.com" \
  MY_ENV4="http://example4.com" \
  start_server -p 1234
'

Eu gostaria de evitar exportá-los, pois não os quero como padrão.

    
por Goro 07.12.2017 / 18:09

3 respostas

5

O alias parece funcionar para mim assim (desde que não haja espaço em branco após as barras invertidas). Mas uma função pode ser mais agradável e, pelo menos, facilita o uso de aspas simples:

staging_server() {
    MY_ENV1='http://example.com' \
    MY_ENV2="..." \
    start_server -p 1234 "$@"
}
    
por 07.12.2017 / 18:24
13

Note que exportação estaria bem (não afetaria o resto da sessão do shell) se você o fizesse em um subshell como:

staging_server() ( # <-- note the ( instead of { here.
  set -o allexport
  MY_ENV1="http://example.com"
  MY_ENV2="http://example2.com"
  MY_ENV3="http://example3.com"
  MY_ENV4="http://example4.com"
  exec start_server -p 1234 "$@"
)

Note que isso não implica um fork adicional, estamos apenas fazendo o fork anteriormente aqui.

O único caso em que isso implicaria uma bifurcação adicional seria se você usasse um shell embutido no lugar start_server lá (nesse caso em alguns shells como bash (um desses shells em que esse exec é necessário) como não é feito implicitamente), usando exec não chama isso de shell embutido).

    
por 07.12.2017 / 18:40
3

Se você precisa de variáveis ambiente , você pode usar o comando env :

alias staging_server='env \
  MY_ENV1="http://example.com" \
  MY_ENV2="http://example2.com" \
  MY_ENV3="http://example3.com" \
  MY_ENV4="http://example4.com" \
  start_server -p 1234
'
    
por 07.12.2017 / 18:54

Tags