setenv do awk no tcsh

1

Estou tentando definir variáveis de ambiente uma por linha do awk:

$ <source command> awk '/inst/ { n = split($0,a,"/"); cmd = "setenv " a[n-1] "_ver" $0; system(cmd) }'

No entanto, a saída que recebo é "sh: setenv: comando não encontrado".

    
por ThomasMcLeod 06.02.2015 / 04:09

1 resposta

2

setenv é um comando somente csh, mas system() executa seus argumentos através do shell Bourne ( /bin/sh ), não csh . Você deseja comandar para ser export VARIABLE=value para o shell Bourne.

No entanto, mesmo se você fizer isso, será ineficaz. system() inicia um novo shell e executa o comando nesse shell. Assim que o comando termina, esse shell - e seu ambiente - desaparecem. Então, a variável de ambiente que você define rapidamente desaparece.

O que você precisa fazer é usar awk para gerar uma lista de comandos csh para executar e gerar saída (não tente executá-los). Então você precisa fazer o shell que chamou a saída awk read awk e executá-lo:

eval 'the awk command'
    
por 06.02.2015 / 04:26

Tags