我在我的Linux/AIX机器上使用bash配置文件运行了一些shell脚本。现在,我的bash配置文件将被删除,我将拥有Korn shell (ksh)或C shell (csh)。如何验证我的脚本是否可以在Korn shell (ksh)或C shell (csh)中正常运行,即使在bash外壳被移除之后也是如此。另外,bash和other (ksh, csh)在常用命令上有什么不同吗?是否有要检查的命令,在运行shell脚本时正在使用哪个shell。
发布于 2014-10-03 22:20:25
首先,这不是问题,您帐户的默认shell是无关紧要的。只要机器上安装了bash,就可以使用它来运行代码。添加一个shebang line作为脚本的第一行:
#!/usr/bin/env bash或者,使用bash显式运行该脚本:
$ /bin/bash /path/to/script.sh至于差异,是的,有很多不同之处。为bash编写的脚本不能在csh中运行,它们的语法完全不同。它可能在ksh上运行,但这将取决于您的脚本。并不是两个shell的所有特性都相同。例如:
$ cat test.sh
var="foo";
echo $var;
$ bash ./test.sh
foo
$ ksh ./test.sh
foo
$ csh ./test.sh
var=foo: Command not found.
var: Undefined variable.正如您在上面看到的,var=foo可以在ksh (它是bourne shell系列的一部分)中正确运行,但在csh上运行失败。基本上,每个shell都可以看作是它自己的编程语言。您不会期望python解释器能够运行perl程序,为什么要期望一个shell能够运行为另一个shell编写的脚本?
发布于 2014-10-08 05:50:39
OP写入bash将被删除。如果您确实无法安装bash。使用#!/bin/ksh启动每个脚本,并检查语法问题:
ksh -n migrated_script当您使用bash/linux特定的东西时,您需要解决这些问题: AIX将在诸如find之类的命令上“缺少”标志(前一小时更改了...)而且ksh本身也是不同的。不要尝试csh,这是完全不同的。
https://stackoverflow.com/questions/26179318
复制相似问题