バッシュはファイルは存在しないと言いますが、存在します


11

linksys WRVS4400Nのファームウェアをコンパイルしようとしています。

ls存在することを示していますが、実行しようとするとbashは存在しないと言います。私もできcatます。これは実行可能ファイルであり、シェルスクリプトではありません。


その特定のファイルのls -laの出力は何ですか?
user389238

@Ansis -rwxrwxrwx 1 1011 1011 31991 2006年5月18日mkdep
Avery3R

1
スクリプトからの行と正確なエラーメッセージを表示してください。"欠落している"ファイルを呼び出そうとしたときの現在のディレクトリは何ですか?
グレン・ジャックマン、2011

@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。それはあなたのPATHにありますか?そうでない場合は、./filename単にとしてではなく、それを呼び出しますfilename


実行可能に設定されているため、。/ mkdepを呼び出してフルパスを使用し、サイコロは使用していません。
Avery3R 2011

ファイルをsudoとして実行する必要がある場合があります。
ダービット

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
close(3)= 0
access( "/ etc / ld.so.nohwcap"、F_OK)= -1 ENOENT(そのようなファイルやディレクトリはありません)
open( "/ lib / librt.so.1"、O_RDONLY)= 3
read(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

(vmで実行、すべてを入力するのが面倒)./mkdepは、見つからないファイルまたはフォルダーを返します。ファイルmkdepは32ビットのelf exeを返し、ヘッドmkdepはバイナリデータを返します
Avery3R 2011

1
mkdepは、必要なファイルが見つからないため、このメッセージを生成している可能性がありますか?
Linker3000 2011

@ linker3000:いいえ、「Bash:/ dirto / mkdep:file or folder not found
Avery3R

@MMavipc:strace ./mkdep 2>mkdep.strace.txtこれを試してみて、何が起こっているのかいくつかのアイデアを与えてください。リポジトリからstraceをインストールする必要があるかもしれません。
RedGrittyBrick 2011

1

スクリプトのIFSを変更していますか?私も自分のスクリプトの1つで同じ問題に遭遇し、同じように思いました(32ビットファイルは64ビットマシンのシェルスクリプトによって読み取られています)。しかし、私の場合、それは問題ではありませんでした。代わりに、IFSをコンマ '、'に変更し、改行してパーサーを混乱させ、このエラーを引き起こしていました。

IFSの変更を削除したところ、問題なく動作しました!!!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.