如何确定现有bash命令是否与新操作系统兼容

时间:2014-08-29 21:14:02

标签: macos bash shell compatibility

我正在升级我们用于某些自动数据处理的mac工作站。在这个过程中,我们调用了几个bash脚本。该工作站目前为10.7.x,我们希望将其升级为Mavericks。

我需要确定的一件事是升级是否会破坏bash脚本。

大多数命令都是常规/usr/bin命令:

  • perl的
  • AWK
  • 排序
  • COMM
  • 加入
  • uniq的
  • SED

但是其中一个特别是内部安装的东西(我以为它是通过macports安装的,但我没有在安装列表中看到它)。

  • gjoin

在实际升级工作站之前,是否有一种很好的方法可以确定这些命令是否在版本之间发生了实质性变化?

2 个答案:

答案 0 :(得分:3)

这些都不是“/usr/bin命令”。它们是系统上存在的二进制文件。它们与你的shell无关。

这些命令中的大多数(如果不是全部)都会在您提出问题时报告其版本(--version或类似)。

要确定事情是否可能破坏,您需要了解相关版本之间的变化,并了解是否重要,您需要知道调用它们的脚本执行的操作以及这些二进制文件/语言的功能。他们使用。话虽如此,我认为这些命令的更新不太可能导致脚本出现问题,除非您的脚本依赖于给定工具中的损坏行为或依赖于工具的明确错误(或其他)消息来进行操作。

编辑:正如Pumbaa80在他对OP的评论中指出的那样,确定脚本是否有效的唯一真正方法是尝试它们并查看。虽然明显地测试非平凡的脚本当然很复杂并且可能非常困难(如果不是全部 - 但根据任务和脚本几乎不可能)。

答案 1 :(得分:1)

顺便说一句......

在您列出的二进制文件/命令中,Perl是奇怪的,因为它通常不能被视为具有单个版本,因为它可以具有额外的installed modules的加载,它们本身可以是不同的版本。您可能会发现在现有OSX 10.7上运行以下内容以查找安装了哪些模块非常有用,这样您就可以在Mavericks上获取并安装相同的模块。

perl -MExtUtils::Installed -MData::Dumper -e '$inst=ExtUtils::Installed->new();print Dumper($inst->modules());'

例如,我给出了这个:

$VAR1 = 'Bundle::NetSNMP';
$VAR2 = 'CPAN';
$VAR3 = 'Color::Similarity';
$VAR4 = 'Crypt::RC4';
$VAR5 = 'Devel::NYTProf'; 
$VAR6 = 'Digest::Perl::MD5';
$VAR7 = 'File::HomeDir';
$VAR8 = 'Graphics::ColorNames';
$VAR9 = 'Graphics::ColorObject';
$VAR10 = 'Image::Magick';
$VAR11 = 'JSON';
$VAR12 = 'JSON::Any';
$VAR13 = 'Mac::SystemDirectory';
$VAR14 = 'Mozilla::CA';
$VAR15 = 'OLE::Storage_Lite';
$VAR16 = 'Perl';
$VAR17 = 'Spreadsheet::ParseExcel';
$VAR18 = 'Spreadsheet::XLSX';
$VAR19 = 'Test::Without::Module';
$VAR20 = 'mod_perl2';