criando alias para o cmd com backticks

2

Estou trabalhando no tcsh. Como faço para criar um alias para:

nc stop 'nc list | awk '/Running/{print $1}''

Eu tentei várias variações de:

alias ncstop "nc stop 'nc list | awk '/Running/{print $1}''"

mas nenhum trabalho

    
por galina korosov 22.01.2017 / 16:18

1 resposta

1

Você pode alterar a citação de um bit para não permitir que os backticks sejam avaliados até quando o alias for usado.

alias ncstop 'nc stop 'nc list | awk '\''/Running/{print $1}'\''''

Isso funciona porque quando o caractere ' é usado para aspas, para que os caracteres especiais, como | , $ e backtick , não sejam interpretados pelo shell. Isso permite que esses caracteres especiais entrem na definição de alias. Mas no processo de definir o alias, o shell remove essa camada externa de ' . O que realmente acaba na definição de alias deve ser:

nc stop 'nc list | awk '/Running/{print $1}''

A construção '\'' geralmente pode usar um pouco de explicação. Mas resumidamente, são três apóstrofos. O primeiro termina a string citada anterior, a próxima (que é escapada para não ser interpretada pela shell) passa e a terceira inicia outra string entre aspas. Portanto, a construção '\'' permite que um apóstrofo (ou seja, ' ou single quote ) apareça dentro de uma única sequência entre aspas.

Obter todas as aspas e fugas diretamente em uma string que precisa atravessar várias camadas de interpretação fica confuso e complicado muito rapidamente. Houve um comentário sobre a questão que recomendou (por bash ) investigar a implementação de aliases como funções. Tenho certeza de que o mesmo poderia ser recomendado para tcsh .

    
por 22.01.2017 / 16:49

Tags