2014-08-29 103 views
0

我正在升级我们用于某些自动数据处理的mac工作站。在这个过程中,我们调用了几个bash脚本。该工作站目前为10.7.x,我们希望将其升级到小牛队。如何确定现有bash命令是否与新操作系统兼容

我需要确定的事情之一是如果升级会打破bash脚本。

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

  • perl的
  • AWK
  • 排序
  • 通讯
  • 加入
  • uniq的
  • sed的

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

  • gjoin

有没有确定这些命令之前,我其实升级的工作站版本之间的任何实质性改变的好办法?

+0

是什么'型gjoin'说? – 2014-08-29 21:20:02

+1

我唯一想到的是:将脚本复制到现有的Mavericks机器上,并在那里做一些测试。 – user123444555621 2014-08-29 21:23:41

+0

@EtanReisner,'type gjoin'给了我:'gjoin是/ opt/local/bin/gjoin' – 2014-08-29 21:24:47

回答

3

这些都不是“/usr/bin命令”。它们是系统中存在的二进制文件。它们与你的外壳无关,因此如此。

大多数(如果不是全部的话)这些命令会报告他们的版本(如果你问他们的话)(--version或类似的)。

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

编辑:正如Pumbaa80在他对OP的评论中指出的那样,确切知道这些脚本是否能够正常工作的唯一真正方法就是试试看看。尽管显然对非平凡脚本的测试肯定是复杂的,并且可能非常困难(如果不是全部的话,根据任务和脚本实际上是不可能的)。

+0

陷阱。我已经记录了每个垃圾箱的版本号,我的计划是寻找版本更改。我只是不知道是否有建议可靠的方式或地点去了解各个版本之间的变化,或者它们都只是谷歌搜索。谢谢。 – 2014-08-29 21:31:00

+0

另外,“命令”和“二进制”不应该交替使用吗?我想我从来没有想太多。我一直认为该命令只是您正在运行的二进制文件的名称。 – 2014-08-29 21:32:42

+0

所以这是一个棘手的问题。 “command”是一个通用术语,可以表示二进制或shell内置(至少)。 “二进制”*应该*表示编译的程序文件(与“脚本”相比),但也可用于脚本(至少通俗地说)。我最初的狡辩不是与“命令”一词有关,而是暗示它们与壳本身有关。 – 2014-08-29 21:44:03

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'; 
+0

太棒了,谢谢你的提示! – 2014-08-29 22:25:54