2014-10-03 42 views
0

我有一些shell腳本,我在我的Linux/AIX機器上運行bash配置文件。現在我的bash個人資料將被刪除,我將有Korn shell (ksh)C shell (csh)。如何驗證我的腳本在Korn shell (ksh)C shell (csh)中運行正常,即使在刪除bash外殼後也是如此。另外,在bashother (ksh, csh)之間的常用命令中是否有任何不同。是否有命令檢查在運行shell腳本時使用哪個shell?如何檢查bash和其他shell配置文件中的差異

+0

從計算機中刪除'bash',還是隻是將登錄shell更改爲其他shell? – chepner 2014-10-03 19:49:45

+0

'bash'即將從機器上移除 – user3772505 2014-10-05 07:08:35

回答

1

首先,這不是問題,您的帳戶的默認外殼是無關緊要的。只要bash安裝在機器上,就可以用它來運行你的代碼。無論是添加shebang line作爲腳本的第一行:

#!/usr/bin/env bash 

或者明確地使用bash運行腳本:

$ /bin/bash /path/to/script.sh 

至於差異,是有很多種。爲bash編寫的腳本不會在csh中運行,它們的語法完全不同。它可能ksh上運行,但這取決於您的腳本。並非兩個外殼的所有特徵都是相同的。例如:

$ 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編寫的腳本?

+1

然而,應該注意到'ksh'和'bash'之間(不像'csh'系列的shell,儘管如你所示),確實有腳本使用shell特性的受限子集的可能性,以便它們可以在其中運行。 – twalberg 2014-10-03 15:35:44

+0

@twalberg謝謝,澄清點。 – terdon 2014-10-03 15:38:10

0

OP寫入bash將被刪除。 如果你真的無法安裝bash。先從#/斌/ KSH每個腳本檢查語法問題:

ksh -n migrated_script 

當你使用bash/Linux特有的東西,你需要解決這些問題: 像find命令AIX將「失蹤」的標誌(最後一小時改變了......)而ksh本身也不同。 不要嘗試csh,這是完全不同的。

相關問題