我想通過腳本運行程序。 通常我在shell中鍵入./program
並且程序啓動。Linux:在腳本中運行二進制文件
我的劇本是這樣的:
#!/bin/sh
cd /home/user/path_to_the_program/
sh program
失敗的話,我認爲最後一行了錯誤...
我知道這是幼稚的問題,但THX很多!
我想通過腳本運行程序。 通常我在shell中鍵入./program
並且程序啓動。Linux:在腳本中運行二進制文件
我的劇本是這樣的:
#!/bin/sh
cd /home/user/path_to_the_program/
sh program
失敗的話,我認爲最後一行了錯誤...
我知道這是幼稚的問題,但THX很多!
這裏不需要「sh」。只需將「程序」放在最後一行上即可。
它告訴我:「程序:找不到」 – 2010-10-17 15:38:08
啊,程序不在你的$ PATH中。 ./程序將工作。 – Toucan 2010-10-17 15:38:44
好吧,有沒有一種方法可以通過腳本運行它,而不必將它放到PATH中? – 2010-10-17 15:39:57
如果./program
在shell中工作,爲什麼不在腳本中使用它?
#!/bin/sh
cd /home/user/path_to_the_program/
./program
sh program
推出SH,試圖解釋program
作爲shell腳本。很可能它不是一個腳本,而是一些其他可執行文件,這就是它失敗的原因。
你不需要sh
,看起來你沒有在你的$PATH
程序的路徑。
試試這個:
#!/bin/sh
cd /home/user/path_to_the_program/
./program
如果解釋了'sh'的使用會更好。爲什麼它不適用於'sh'? – Arafangion 2010-10-18 04:32:12
這應該是足夠了:
/home/user/path_to_the_program/program
如果不工作,檢查以下內容:
如果程序依賴於當前目錄中的相對路徑,那麼給出路徑可能不起作用。例如,程序可能依賴與程序位於同一目錄中的輸入文件。 – 2010-10-17 15:58:16
在這種情況下,你是對的。 – 2010-10-17 16:11:19
無論如何完成,完整路徑必須來自/某處/ - 如果不在路徑上,則通過shebang線(如果不在那裏),則必須通過某種方式明確設置。 – Arafangion 2010-10-18 04:30:54
當鍵入
./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腳本的東西。
不應該是#!/ bin/sh? – Protostome 2010-10-17 15:36:16