como definir e usar vários parâmetros em uma única variável ambiental na casca do peixe

como definir e usar vários parâmetros em uma única variável ambiental na casca do peixe

Eu quero usar o seguinte no fishshell:

$ export arm='ARCH=arm CROSS_COMPILE=arm-eabi-'
$ make $arm 

Isso funciona bem bash/zsh, masnãona fishcasca.

Mas se eu executar o seguinte no fishshell:

$env tmp=arm make

isso funciona bem.

Alguém por favor pode me ajudar com isso?

Responder1

Você está procurando set -x:

set -x arm 'ARCH=arm CROSS_COMPILE=arm-eabi-'

Veja oseção do tutorial sobre variáveis ​​de ambientepara mais.

Responder2

Em sh/ bash:

export arm='ARCH=arm CROSS_COMPILE=arm-eabi-'
make $arm

Realmente não faz sentido. Variáveis ​​de ambiente são entendidas como variáveis ​​passadas para make(portanto, uma referência a $(arm) no Makefile, por exemplo, expande seu conteúdo). As variáveis ​​de ambiente são escalares e podem conter apenas um valor de string. Acima você está contando com o operador split+globda cascaque divide a variável em palavras passadas para make(como argumentos).

Mas $armé expandido pelo shell, então não precisa exportar armpara o ambiente do makepq makenão faz uso dessa $armvariável.

Além disso, em um shell que os suporte, faria mais sentido usar arrays. Em bash/ zsh/ ksh:

arm=(ARCH=arm CROSS_COMPILE=arm-eabi-)
make "${arm[@]}"

Com fish:

set arm ARCH=arm CROSS_COMPILE=arm-eabi-
make $arm

Com rc/ es/ zsh:

arm=(ARCH=arm CROSS_COMPILE=arm-eabi-)
make $arm

informação relacionada