
因此,在一個目錄中/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
執行腳本時不需要您位於某個目錄)。