2010-10-17 1956 views
7

我想通過腳本運行程序。 通常我在shell中鍵入./program並且程序啓動。Linux:在腳本中運行二進制文件

我的劇本是這樣的:

#!/bin/sh 
cd /home/user/path_to_the_program/ 
sh program 

失敗的話,我認爲最後一行了錯誤...

我知道這是幼稚的問題,但THX很多!

+0

不應該是#!/ bin/sh? – Protostome 2010-10-17 15:36:16

回答

0

這裏不需要「sh」。只需將「程序」放在最後一行上即可。

+0

它告訴我:「程序:找不到」 – 2010-10-17 15:38:08

+0

啊,程序不在你的$ PATH中。 ./程序將工作。 – Toucan 2010-10-17 15:38:44

+0

好吧,有沒有一種方法可以通過腳本運行它,而不必將它放到PATH中? – 2010-10-17 15:39:57

11

如果./program在shell中工作,爲什麼不在腳本中使用它?

#!/bin/sh 
cd /home/user/path_to_the_program/ 
./program 

sh program推出SH,試圖解釋program作爲shell腳本。很可能它不是一個腳本,而是一些其他可執行文件,這就是它失敗的原因。

2

你不需要sh,看起來你沒有在你的$PATH程序的路徑。

試試這個:

#!/bin/sh 
cd /home/user/path_to_the_program/ 
./program 
+0

如果解釋了'sh'的使用會更好。爲什麼它不適用於'sh'? – Arafangion 2010-10-18 04:32:12

1

這應該是足夠了:

/home/user/path_to_the_program/program 

如果不工作,檢查以下內容:

  • 可執行位
  • 家當線該程序(如果它是一個腳本)
+0

如果程序依賴於當前目錄中的相對路徑,那麼給出路徑可能不起作用。例如,程序可能依賴與程序位於同一目錄中的輸入文件。 – 2010-10-17 15:58:16

+0

在這種情況下,你是對的。 – 2010-10-17 16:11:19

+0

無論如何完成,完整路徑必須來自/某處/ - 如果不在路徑上,則通過shebang線(如果不在那裏),則必須通過某種方式明確設置。 – Arafangion 2010-10-18 04:30:54

3

當鍵入

./program 

殼試圖根據它如何確定該文件需要被執行以執行該程序。如果它是二進制文件,它將嘗試執行入口子程序。如果殼檢測到它是一個腳本,例如,通過使用

#!/bin/sh 

#!/bin/awk 

或更一般

#!/path/to/interpreter 

殼會通過文件(和任何提供的參數)作爲參數提供給解釋器,然後它將執行腳本。如果路徑中給出的解釋器不存在,那麼shell將會出錯,並且如果沒有找到解釋器行,那麼shell將假定提供的腳本將自行執行。

甲命令

sh program 

相當於

./program 

當程序的第一行包含

#!/bin/sh 

假定/ bin/sh的是在路徑的SH(例如它可能是/ system/bin/sh)。將一個二進制文件傳遞給sh將導致sh將其視爲一個shell腳本,事實並非如此,二進制文件不是可解釋的shell(它是純文本文件)。這就是爲什麼你不能在這種情況下使用

sh program 

。它也會失敗,因爲程序是ruby,awk,sed或者其他不是shell腳本的東西。

相關問題