如何從目錄外部的 shell 檔案執行已編譯的 java 或 c 程式?

如何從目錄外部的 shell 檔案執行已編譯的 java 或 c 程式?

因此,在一個目錄中/home/pi/remoteinfo/temp/code 有一個名為 的 C 程式a.out和一個名為 的 shell 檔案tempstart.sh

tempstart.sh 檔案內的內容如下:

#!/bin/bash
./a.out

現在,當我進入時,/home/pi/remoteinfo/temp/code我可以打字./tempstart.sh,我的程式將開始執行。

但是當我嘗試tempstart.h從其目錄之外的任何地方運行時,我得到了 line 3: ./a.out: No such file or directory.

發生了什麼事以及如何解決?

我使用的是帶有預設作業系統的 Raspberry Pi 3

答案1

發生的情況是,腳本將在當前工作目錄中執行命令./a.out,因為這就是寫入腳本的內容;如果您從其他地方運行腳本,您的二進位檔案是不在目前的工作目錄,導致 shell 拋出您所看到的錯誤。

如果您想使用腳本來呼叫二進位文件,而不管從哪個目錄呼叫它,您至少有四個選擇:

  • 放入a.out您已有的目錄中PATH,並停止將目前工作目錄指定為 的位置a.out(例如,移至a.out$HOME/bin/a.out並將腳本變更為簡單執行a.out而不是./a.out)。
  • 讓腳本明確地呼叫二進位檔案的完整路徑(例如./a.out,而不是,而不是/path/to/the/location/of/a.out
  • 將腳本新增至它是 PATH腳本的位置,並且不要指定目前目錄作為二進位檔案的位置(例如PATH="$PATH:/path/to/the/binary"; a.out
  • 有腳本在嘗試執行腳本之前將工作目錄移至腳本的位置(例如cd /path/to/the/binary; ./a.out

答案2

./script.sh會假設您在同一目錄中運行它。

假設a.out在 中/var/run/a.out,您可以變更tempstart.sh以包含完整的檔案路徑。

此時您可以從任何地方執行腳本(前提是a.out執行腳本時不需要您位於某個目錄)。

相關內容