有 csh 到 bash 脚本转换器吗?

有 csh 到 bash 脚本转换器吗?

在 C shell 中编程是被认为有害由一些人编写,但 csh 脚本仍然由一些铁杆 csh 粉丝编写。有没有免费/开源转换器可以将 csh 脚本转换为 bash?

如果这样的程序不存在,是否可以(纯粹出于技术考虑)编写一个程序?

答案1

我对这个答案有两个截然不同的部分。我将从稍微技术性的部分开始,然后是更多的个人想法(好吧,咆哮)。


shellbash附带了一个cshtobash隐藏在examples/misc其源代码分发目录中的脚本。

这不会采用csh脚本并将其转换为bash,但它可能对某人有用,作为从现有的-style文件创建原型sh-style文件的第一步。~/.profilecsh~/.login

输入:标准 OpenBSDcsh初始化文件。

# $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

输出:不完全相同bash……但是至少有一些东西

# 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

是的,C-shell 编程“被认为是有害的”。这并不意味着您不能编写无害或不健壮的 C-shell shell 脚本。这也不意味着每个 C-shell 脚本都需要转换为bash.还有它确实并不意味着这样的转换应该由自动工具完成!这只是意味着它是一种尴尬的语言,有一些非常奇怪的怪癖,特别是如果您更习惯的话sh

与任何两种编程语言一样,当一种语言因另一种语言的利益而过时时,这并不意味着现有软件需要重写。这也不意味着精通这种过时语言的人应该停止说话。这只是意味着,如果您正在寻找一种现代语言来编写 shell 脚本,那么这可能不是您需要选择的语言。

另一方面,如果给你的任务是延伸或以其他方式修改csh脚本,然后可能有理由

  1. 阅读代码
  2. 明白它
  3. 用另一种语言重新实现它

...特别是如果您不擅长csh编程。

至于自动翻译:为什么?

如果脚本正在运行并且您的系统上有它的解释器,则无需翻译代码。自动翻译代码不太可能生成“更好”的代码,而且很可能不会生成可维护的代码,并且您必须花时间验证翻译后的脚本的行为方式是否与原始脚本相同。

相关内容