Gow*_*ham 6 bash csh conversion
一些人认为在 C shell 中编程是有害的,但一些 csh 铁杆粉丝仍在继续编写 csh 脚本。是否有免费/开源转换器将 csh 脚本转换为 bash?
如果这样的程序不存在,是否有可能(从纯粹的技术考虑)编写一个?
我对这个答案有两个截然不同的部分。我将从稍微技术性的部分开始,然后是更多的个人想法(好吧,咆哮)。
shellbash
附带了一个cshtobash
隐藏在examples/misc
其源代码分发目录中的脚本。
这不会采用csh
脚本并将其转换为bash
,但它可能对某人有用,作为从现有的样式文件创建原型sh
样式文件的第一步。~/.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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
是的,C-shell 编程“被认为是有害的”。这并不意味着您不能编写无害或不健壮的 C-shell shell 脚本。这也不意味着每个 C-shell 脚本都需要转换为bash
. 而且这绝对不意味着这样的转换应该由自动工具完成!这只是意味着它是一种尴尬的语言,有一些非常奇怪的怪癖,特别是如果您更习惯的话sh
。
与任何两种编程语言一样,当一种语言因另一种语言的利益而过时时,这并不意味着现有软件需要重写。这也不意味着精通这种过时语言的人应该停止说话。这只是意味着,如果您正在寻找一种现代语言来编写 shell 脚本,那么这可能不是您需要选择的语言。
另一方面,如果您接到扩展或以其他方式修改csh
脚本的任务,那么可能有理由
...特别是如果您不擅长csh
编程。
至于自动翻译:为什么?
如果脚本正在运行并且您的系统上有它的解释器,则无需翻译代码。自动翻译代码不太可能生成“更好”的代码,而且很可能不会生成可维护的代码,而且您必须花时间验证翻译后的脚本的行为是否与原始脚本相同。