2014-08-29 24 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