따라서 디렉터리에는 /home/pi/remoteinfo/temp/code
이라는 이름의 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
.
무슨 일이 일어났으며 어떻게 해결하나요?
기본 운영 체제로 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
스크립트를 실행하기 위해 디렉토리에 있을 필요가 없는 경우).