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


11

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

ls존재한다는 것을 보여 주지만 실행하려고하면 존재하지 않습니다. 또한 cat가능하며 쉘 스크립트가 아닌 실행 파일입니다.


특정 파일에 대한 ls -la의 출력은 무엇입니까?
user389238

@Ansis -rwxrwxrwx 1 1011 1011 31991 년 5 월 18 일 mkdep
Avery3R

1
스크립트의 줄과 정확한 오류 메시지를 보여주십시오. "missing"파일을 호출하려고 할 때 현재 디렉토리는 무엇입니까?
glenn jackman

@glenn 스크립트를 실행하는 스크립트가 아닙니다. cisco의 makefile입니다. VM에서 실행되고 있기 때문에 정확한 오류 메시지를받을 수 없지만 bash : / pathto / mkdep 파일 또는 폴더를 찾을 수 없습니다
Avery3R

그래서 그 트롤이 숨어의 ...
혁신적인

답변:


8

의 출력은 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을 만들고 컴파일하십시오.


1
ia32-libs를 설치하면 나중에 작동합니다. 32 비트 VM을 만들 필요가 없습니다.
Phil

5

실행 가능하도록 설정되어 있습니까? 그렇지 않은 경우 chmod +x filename. 당신의 경로에 있습니까? 그렇지 않다면 ./filename그냥 호출하지 말고 호출하십시오 filename.


실행 파일로 설정되어 있습니다. 주사위를 사용하지 않고 전체 경로를 사용하거나 호출하기 위해 ./mkdep을 수행했습니다.
Avery3R

파일을 sudo로 실행해야 할 수도 있습니다.
D' Arvit

2

파일을 실행하려고 할 때 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 vars * /]) = 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

./mkdep는 파일 또는 폴더를 찾을 수 없음을 반환합니다. mkdep 파일은 32 비트 엘프 exe를 반환하고 head mkdep는 이진 데이터를 반환합니다
Avery3R

1
mkdep가 필요한 파일을 찾을 수 없기 때문에이 메시지를 생성하고있을 가능성이 있습니까 ??
Linker3000

@ linker3000 : 아닙니다. Bash : / dirto / mkdep : 파일 또는 폴더를 찾을 수 없습니다
Avery3R

@ MMavipc : 시도 strace ./mkdep 2>mkdep.strace.txt하고있는 일에 대한 아이디어를 제공해야합니다. 저장소에서 strace를 설치해야 할 수도 있습니다.
RedGrittyBrick

1

스크립트에서 IFS를 변경하고 있습니까? 내 스크립트 중 하나에서 동일한 문제가 발생하여 동일하다고 생각했습니다 (64 비트 시스템의 쉘 스크립트에서 32 비트 파일을 읽습니다). 그러나 그것은 내 경우에는 문제가되지 않았습니다. 대신 IFS를 쉼표 '로 변경하고 파서를 혼란스럽게 하고이 오류를 일으킨 줄 바꿈으로 돌아갔습니다.

방금 IFS의 변경 사항을 제거했으며 지금은 정상적으로 작동합니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.