Existe um tradutor csh para bash script?

5

A programação no shell C é considerada prejudicial por algumas pessoas, mas os scripts do csh continuam ser escrito por alguns fãs hardcore csh. Existe um conversor free / open source para traduzir o script csh para o bash?

Se tal programa não existe, é possível (a partir de uma consideração puramente técnica) escrever um?

    
por Gowtham 20.12.2016 / 19:38

1 resposta

2

Eu tenho duas partes muito distintas para esta resposta. Vou começar com um pouco mais técnico, e depois com mais pensamento pessoal (ok, rant).

O shell bash vem com um script cshtobash escondido no diretório examples/misc de sua distribuição de origem.

Isso não pegará um script csh e o converterá em bash , mas pode ser útil para alguém como primeiro passo na criação de um protótipo sh -style ~/.profile de arquivo de um arquivo csh -style ~/.login já existente.

Entrada: arquivo padrão de inicialização do OpenBSD csh .

# $OpenBSD: dot.login,v 1.6 2015/12/15 16:37:58 deraadt Exp $
#
# csh login file

if ( ! $?TERMCAP ) then
        if ( $?XTERM_VERSION ) then
                tset -IQ '-munknown:?vt220' $TERM
        else
                tset -Q '-munknown:?vt220' $TERM
        endif
endif

stty    newcrt crterase

set     savehist=100
set     ignoreeof

setenv  EXINIT          'set ai sm noeb'

if (-x /usr/games/fortune) /usr/games/fortune

Saída: não é a mesma coisa para bash ... mas pelo menos alguma coisa .

# csh aliases


# csh environment variables

export USER='me'
export HOME='/home/me'
export PATH='/usr/bin:/bin:/usr/ucb:.'
export TERM='rxvt'
export SHELL='/bin/bash'
export EXINIT='set ai sm noeb'

# csh variables

set -o ignoreeof # ignoreeof
PS1='% '
prompt2='? '
HISTFILESIZE='100'

# special csh variables converted to bash equivalents

Sim, a programação C-shell é "considerada prejudicial". Isso não significa que você não pode escrever scripts de shell C-shell que não sejam prejudiciais ou não sejam robustos. Isso também não significa que todo script C-shell precisa ser convertido em bash . E isso definitivamente não significa que tal conversão deva ser feita por uma ferramenta automática! Significa apenas que é uma linguagem estranha que tem algumas peculiaridades muito estranhas, especialmente se você está mais acostumado com sh .

Como acontece com quaisquer duas linguagens de programação, quando uma sai de moda para o benefício da outra, isso não significa que software existente precise ser reescrito. Também não significa que os falantes proficientes da linguagem fora de moda devam parar de falar. Significa apenas que esta pode não ser a linguagem para pegar se você está procurando por uma linguagem moderna para fazer scripts de shell.

Por outro lado, se você tiver a tarefa de estender ou de alguma outra forma modificar um script csh , então pode haver um motivo para

  1. leia o código
  2. entenda
  3. reimplementá-lo em outro idioma

... especialmente se você não for bom em csh programming.

Quanto à tradução automática: Por quê?

Se o script estiver funcionando e você tiver o intérprete para ele em seu sistema, não haverá necessidade de traduzir o código. É improvável que a tradução automática do código gere código "melhor", o que provavelmente não gerará código sustentável , e você terá que gastar tempo para verificar se o script traduzido se comporta da mesma maneira como o script original de qualquer maneira.

    
por 24.01.2017 / 15:00