Como usar um caminho no documento

1

Eu escrevi este documento aqui para criar alguns scripts no caminho ~/own_scripts/ , mas escrevi de uma forma que causa a duplicação desse caminho:

source <<-EOF
  ~/own_scripts/1.sh
  ~/own_scripts/2.sh
  # More scripts under ~/own_scripts;
EOF

A configuração e, posteriormente, a desativação de uma variável com o caminho é boa, mas ainda resultaria em redundância.

Qual é a melhor maneira de evitar a redundância de caminho em tal source (ou bash ) aqui-documento?

    
por user9303970 03.02.2018 / 06:48

1 resposta

1

Um documento aqui é apenas um documento. Um script em um documento aqui é apenas um script.

Seu script pode ser escrito

cd "$HOME/own_scripts" || exit 1
./1.sh
./2.sh

Ou, se todos os scripts que você deseja invocar forem chamados de n.sh com n , variando de 1 a, digamos, 30:

cd "$HOME/own_scripts" || exit 1
for (( i = 1; i <= 30; ++i )); do
    [ -x "${i}.sh" ] && ./${i}.sh
done

Isto é,

source <<-'END_SCRIPT'
    cd "$HOME/own_scripts" || exit 1
    for (( i = 1; i <= 30; ++i )); do
        [ -x "${i}.sh" ] && ./${i}.sh
    done
END_SCRIPT

Na verdade, como o documento here agora é bem curto, você pode se livrar do cd novamente:

source <<-'END_SCRIPT'
    for (( i = 1; i <= 30; ++i )); do
        [ -x "$HOME/own_scripts/${i}.sh" ] && "$HOME/own_scripts/${i}.sh"
    done
END_SCRIPT

Apenas, source não lê a entrada padrão ... então, pesquisar o documento aqui não funcionará para começar.

Em vez disso, use algo como

bash <<-'END_SCRIPT'
    ...as above...
END_SCRIPT

(se bash for o shell com o qual você deseja executar o script).

  • Eu usei 'END_SCRIPT' para iniciar o documento here. A cotação impede que o shell atual expanda variáveis dentro do documento, e a tag mais detalhada serve como documentação para o leitor.

  • Eu usei $HOME em vez de ~ desde que til não se comportam como uma variável e a mais detalhada $HOME serve melhor como documentação em scripts.

  • O script no documento here simplesmente usa cd para alterar o diretório para o diretório $HOME/onw_script . Se isso falhar, a sessão do shell será encerrada.

  • Nos exemplos com o for -loop (que funcionará em bash e ksh shells), eu gero o nome do script para executar no loop. Eu também testo se há realmente um arquivo executável disponível com esse nome antes de tentar executá-lo (com th -x test).

por 03.02.2018 / 08:14