É possível que um script de shell contenha os comandos tcsh e bash no mesmo script?

2

Digamos que eu modifique um monte de código que usa o tcsh, mas como muitas pessoas dizem que o bash é mais moderno, eu também gostaria de aprender bash ao longo do caminho. É possível usar um script que contenha esses dois comandos ao mesmo tempo? Como isso é para uso pessoal, a elegância não é um problema.

    
por InquilineKea 10.06.2012 / 00:28

3 respostas

2

Não, não é possível.

A razão é que o shell lê partes do arquivo à medida que ele é executado, e um fragmento pode conter código de shell que você deseja executar em um shell diferente, mas como ele já foi lido pelo primeiro shell, o segundo shell não pode lê-lo se fosse para assumir a execução do script. (Isso pode funcionar se o shell tiver a capacidade de lseek() do arquivo, mas as linguagens de shell não são avançadas)

No entanto, há um jeito sujo de fazer isso; zsh.
O zsh tem um comando chamado emulate , que permite alternar entre os idiomas do shell em tempo real. Mas usar o zsh apenas para emular tcsh e bash é simplesmente sujo, para não mencionar excessivamente complexo.

.

Também eu não diria que o bash é mais moderno. É mais difundido, mas adota recursos em um ritmo muito lento. Bash é mais focado em compatibilidade do que qualquer coisa.

    
por 10.06.2012 / 19:41
6

Eu não recomendaria misturar e combinar tipos de shell em um script.

  1. Você perde a eficiência ao lançar um shell para executar um comando e retornar um resultado.
  2. Uma das razões para manter tudo o que um script precisa no script é que esse script tem acesso a todas as variáveis declaradas e retornadas de funções, etc. Passando uma pilha de variáveis inteira para outro shell apenas para executar alguns comandos e depois voltar, parece um pouco contra-intuitivo.

Eu diria que sua melhor aposta seria copiar um script conhecido e alterar o shell de chamada e, em seguida, ver o que quebra, para que você saiba onde as diferenças de sintaxe precisam ser resolvidas.

Mas, em suma, tentar misturar e combinar em um script parece ser uma má ideia. (pessoalmente)

    
por 10.06.2012 / 01:30
4

Concordo com as outras respostas que geralmente não é uma ótima ideia.

Mas você pode invocar um shell de um script. Se você tiver um script atualmente escrito para usar o tcsh e quiser usar alguns recursos específicos do bash, poderá chamar o bash explicitamente. Por exemplo, o bash torna muito mais fácil redirecionar o stdout e o stderr independentemente.

#!/bin/tcsh -f

echo Hello, tcsh
bash -c 'echo Hello, bash 1>&2' # writes to stderr
echo Good-bye, tcsh

No longo prazo, porém, provavelmente é melhor traduzir o script inteiro para usar o bash.

Link obrigatório: link

    
por 10.06.2012 / 21:09