Como passar o segundo argumento na função bash

1

Digamos que eu tenha esse bash function onde primeiro me conectei a uma Área de Trabalho Remota e, em seguida, quero usar um segundo argumento enquanto estou conectado à linha de comando da Área de Trabalho Remota (é por isso que usei a única No entanto, não sei ao certo como colocar o argumento $2 .

my_func () {
ssh blah blah blah $1 'cd $2'
}

Não tenho certeza sobre como devo especificar o segundo argumento. Eu tentei executar esta função na máquina local como: my_func a b , onde b é um diretório na Área de Trabalho Remota, mas não pareço ter a saída esperada.

    
por thanasissdr 06.10.2017 / 13:30

3 respostas

4

Você precisaria citar $2 de uma maneira adequada para o shell de login do usuário remoto. Por exemplo, supondo que seja como o Bourne:

shquote() {
  LC_ALL=C awk -v q=\' '
    BEGIN{
      for (i=1; i<ARGC; i++) {
        gsub(q, q "\" q q, ARGV[i])
        printf "%s ", q ARGV[i] q
      }
      print ""
    }' "$@"
}

my_func () {
  ssh blah blah blah "$1" "cd -- $(shquote "$2")"
}

Por exemplo, shquote() transformaria Stephane's dir em 'Stephane'\''s dir' , portanto, a linha de comando cd -- 'Stephane'\''s dir' é interpretada pelo shell remoto tipo Bourne como executando cd com um argumento de diretório Stephane's dir .

Em qualquer caso, executar um shell em um host remoto que só faz cd não vai conseguir nada útil.

Mais leituras (e mais opções, inclusive para os casos em que o shell de login do usuário remoto não é parecido com Bourne) em Como executar um comando simples arbitrário sobre o ssh sem conhecer o shell de login do usuário remoto?

    
por 06.10.2017 / 13:44
1
my_func () {
ssh blah blah blah $1 'cd $2'
}

Não use aspas simples. As variáveis de bash não são expandidas quando você usa aspas simples, tente ssh blah blah blah $1 "cd $2" que deve funcionar. Certifique-se de que alterar aspas simples para aspas duplas não fará com que o bash expanda outras coisas em seu comando, ou você pode obter um resultado inesperado.

    
por 06.10.2017 / 13:34
1

e:

my_func() {
    blah blah blah blah $1 "cd \"$2\""
}

isso não funciona para parâmetros que contêm " .

    
por 06.10.2017 / 13:58