Passar argumentos para uma subchave Bash após sua definição

1

Eu gostaria de fazer algo assim:

(cd "$1" && pwd && many && other && commands) < echo "../path"

O qual deve pegar os argumentos fornecidos e passá-los para o subshell. O subshell deve então executar.

A parte importante é que os argumentos passados estão no final da linha de comando para permitir a fácil alteração, porque o cursor está no final do comando quando o usuário pressiona a seta para cima.

    
por meridius 25.01.2017 / 12:18

1 resposta

2

Um subshell bash herdará as variáveis do shell pai (mas não as modificará!).
Uma maneira simples é definir uma série de comandos com variáveis que você define e modificá-los no shell pai.

MyTempVar="FirstPath"
(cd "$MyTempVar" && pwd && many && other && commands) && unset MyTempVar
MyTempVar="NewPath"
!-2      
  • Com !-2 , se as opções de histórico estiverem ativadas, você executará o segundo último comando do seu histórico. É uma expansão da história do built-in do bash.
  • Mais seguro é ativar a histverify com shopt -s histverify para ter uma confirmação visual antes que o comando do histórico seja processado.
  • Novamente, é seguro Acima + Acima + Enter .
  • Com unset MyTempVar , você pode, opcionalmente, remover a variável MyTempVar , se desejar.

Você pode até criar uma função ou um script e passar as variáveis para eles. Por exemplo,

TTT(){ (A="$1"; cd "$A" && pwd ;)  }

ligue para

TTT MyPath
    
por 25.01.2017 / 13:28