
따라서 디렉토리에는 /home/pi/remoteinfo/temp/code
C 프로그램이라는 C 프로그램 a.out
과 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
.
무슨 일이 일어나고 있으며 어떻게 해결할 수 있나요?
기본 OS가 설치된 Raspberry Pi 3를 사용하고 있습니다.
답변1
무슨 일이 일어나고 있는지는 스크립트가 ./a.out
현재 작업 디렉토리에서 명령을 실행한다는 것입니다. 이것이 스크립트에 기록된 것입니다. 다른 곳에서 스크립트를 실행하면 바이너리는안에는 없어현재 작업 디렉토리로 인해 쉘에서 현재 보고 있는 오류가 발생합니다.
스크립트를 사용하여 바이너리가 호출된 디렉터리에 관계없이 바이너리를 호출하려는 경우 최소한 네 가지 옵션이 있습니다.
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
실행 시 특정 디렉터리에 있을 필요가 없는 경우).