在 C shell 中编程是被认为有害由一些人编写,但 csh 脚本仍然由一些铁杆 csh 粉丝编写。有没有免费/开源转换器可以将 csh 脚本转换为 bash?
如果这样的程序不存在,是否可以(纯粹出于技术考虑)编写一个程序?
答案1
我对这个答案有两个截然不同的部分。我将从稍微技术性的部分开始,然后是更多的个人想法(好吧,咆哮)。
shellbash
附带了一个cshtobash
隐藏在examples/misc
其源代码分发目录中的脚本。
这不会采用csh
脚本并将其转换为bash
,但它可能对某人有用,作为从现有的-style文件创建原型sh
-style文件的第一步。~/.profile
csh
~/.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
脚本,然后可能有理由
- 阅读代码
- 明白它
- 用另一种语言重新实现它
...特别是如果您不擅长csh
编程。
至于自动翻译:为什么?
如果脚本正在运行并且您的系统上有它的解释器,则无需翻译代码。自动翻译代码不太可能生成“更好”的代码,而且很可能不会生成可维护的代码,并且您必须花时间验证翻译后的脚本的行为方式是否与原始脚本相同。