내 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의 변경 사항을 제거했는데 이제 잘 작동합니다!!!