2012-11-07 35 views
3

我嘗試了很多,但無法從中獲得解決方案。我有一個簡單的腳本:bash腳本中的錯誤替換錯誤

#! /bin/sh 
o="12345" 
a=o 
b=${!a} 
echo ${a} 
echo ${b} 

當一個像

$ . scp.sh 

它產生的,沒有錯誤的正確的輸出執行,但是當像執行:

$ ./scp.sh 

它產生

./scp.sh:4:./scp.sh:錯誤替代

任何想法爲什麼會發生這種情況。


我被建議使用bash模式,它工作正常。但是,當我通過Python執行相同的腳本(將腳本標題更改爲bash)時,我遇到了同樣的錯誤。

我從Python中調用它爲:

import os 
os.system(". ./scp.sh") 
+0

你可以顯示python腳本中使用的行來執行此操作嗎? – raina77ow

+0

@ raina77ow我編輯了這個問題。謝謝 – Shahzad

回答

9

嘗試使用:

#!/bin/bash 

,而不是

#! /bin/sh 
+0

謝謝。它的工作正常。但是,如果我通過python執行相同的腳本(更改爲bash模式),我會得到相同的錯誤。我現在正在編輯這個問題。這將是更可行。 – Shahzad

+0

從python而不是做os.system(「scp.sh」)嘗試做os.system(「bash scp.sh」),看看它是否有幫助 – bobah

+0

即使我只指定os.system(「./scp.sh 「) 有用。我不明白,爲什麼os.system(「。./scp.sh」)不起作用。雖然我的環境中的$ SHELL是/ bin/shell,所以它應該使用bash而不是sh,而且我現在也將腳本標題更改爲bash。 – Shahzad

7

其原因錯誤是兩個不同的殼是在這些情況下使用。

$ . scp.sh命令將使用當前shell(bash)來執行腳本(不分叉子shell)。

$ ./scp.sh命令將使用您的腳本的hashbang行中指定的shell。在你的情況下,它可以是shdash

最簡單的方法是用#!/bin/bash(或任何路徑bash所在的路徑)替換第一行。