Bash는 파일이 존재하지 않는다고 말하지만 존재합니다

Bash는 파일이 존재하지 않는다고 말하지만 존재합니다

내 linksys WRVS4400N용 펌웨어를 컴파일하려고 합니다.

ls존재한다고 표시되지만 실행하려고 하면 bash는 존재하지 않는다고 말합니다. 나는 또한 cat그것을 할 수 있고 그것은 쉘 스크립트가 아닌 실행 파일입니다.

답변1

당신은 의 출력이 이라고 언급 file mkdep했습니다 32-bit elf. 64비트 VM을 실행하고 있습니다.

예:

$ uname -m
x86_64
$ ls -l ./example 
-rwxr-xr-x 1 root root 92312 2011-08-18 16:52 ./example
$ file ./example 
example: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped
$ ./example 
-bash: ./example: No such file or directory

새로운 32비트 VM을 만들고 거기에서 컴파일하면 됩니다.

답변2

실행 가능하도록 설정되어 있습니까? 그렇지 않다면 chmod +x filename. PATH에 있나요? 그렇지 않은 경우에는 ./filename그냥 이라고 부르지 말고 이라고 부르십시오 filename.

답변3

파일을 실행하려고 할 때 bash가 파일이 존재하지 않는다고 말한다면 이는 때때로 bash가 파일이 스크립트이고 첫 번째 줄(#!)에 지정된 인터프리터가 존재하지 않는다고 믿는다는 의미입니다.

파일 이름이 지정되면 mkdep다음 출력을 게시합니다.

./mkdep
file mkdep
hd mkdep | head
strace ./mkdep 2>mkdep.strace.txt

strace 명령은 수행된 시스템 호출에 대한 정보를 제공합니다. 예를 들어 strace ls 2>ls.t다음을 ls.t에 넣습니다.

execve("/bin/ls", ["ls"], [/* 22 변수 */]) = 0
brk(0) = 0x8061000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (해당 파일이나 디렉터리가 없음)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f82000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (해당 파일이나 디렉터리가 없음)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=32311, ...}) = 0
mmap2(NULL, 32311, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f7a000
닫기(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (해당 파일이나 디렉터리가 없음)
open("/lib/librt.so.1", O_RDONLY) = 3
읽기(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\240\ 30\0\0004\0\0\0"..., 512) =512
fstat64(3, {st_mode=S_IFREG|0644, st_size=30624, ...}) = 0

답변4

스크립트에서 IFS를 변경하고 있습니까? 나 역시 내 스크립트 중 하나에서 동일한 문제에 직면했고 같은 생각을 했습니다(64비트 시스템의 쉘 스크립트에서 32비트 파일을 읽는 중). 하지만 내 경우에는 그게 문제가 아니었습니다. 대신 IFS를 쉼표 ','로 변경하고 새 줄로 돌아가서 어떻게든 파서가 혼란스러워서 이 오류가 발생했습니다.

방금 IFS의 변경 사항을 제거했는데 이제 잘 작동합니다!!!

관련 정보