como executar o comando shell dentro do awk

2

Estou tentando alterar o diretório quando de um caminho para o caminho B, como abaixo

pwd|awk '{if($1=="/") cd /tmp/}'
awk: syntax error near line 1
awk: illegal statement near line 1

por favor sugira

    
por Anavarathan 11.09.2018 / 13:42

2 respostas

1

É possível chamar cd de dentro de awk (usando system() , não há nenhum comando awk chamado cd ), mas não faria muito. Em particular, ele não alteraria o diretório de trabalho atual do shell que iniciou awk . O diretório de trabalho é local para um ambiente, e awk e qualquer outro processo ou subshell estão sendo executados em seus próprios ambientes, herdados de seus processos pai (e o ambiente do processo pai não pode ser alterado de um processo filho). / p>

Se você quiser apenas ver se o diretório atual é o diretório raiz e cd to /tmp , se estiver, você pode fazer isso diretamente no shell:

[ "$PWD" = "/" ] && cd /tmp
    
por 11.09.2018 / 13:55
2

Você pode usar system() em awk para executar qualquer comando, mas não pode usá-lo para alterar o diretório enquanto executa o comando em um subshell, para que você altere o diretório na sub-rede que será imediatamente encerrada. O comando seria o seguinte:

pwd|awk '$0 == "/"{system("cd /tmp")}'

Mas como eu disse, não vai funcionar. Se você adicionar echo na frente do comando, verá que, de fato, ele está sendo executado quando você esperaria:

$ cd /
$ pwd|awk '$0 == "/"{system("echo cd /tmp")}'
cd /tmp
$ cd /home
$ pwd|awk '$0 == "/"{system("echo cd /tmp")}'

Acho que seria melhor usar e if statement:

if [ "${PWD}" = '/' ];then 
  cd /tmp
fi
    
por 11.09.2018 / 13:52

Tags