Ich versuche, die Firmware für meinen Linksys WRVS4400N zu kompilieren.
ls
zeigt an, dass es existiert, aber wenn ich versuche, es auszuführen, sagt Bash, dass es nicht existiert. Ich kann cat
es auch, und es ist eine ausführbare Datei, kein Shell-Skript.
Antwort1
Sie haben erwähnt, dass die Ausgabe file mkdep
lautet 32-bit elf
. Sie führen eine 64-Bit-VM aus.
Beispiel:
$ 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
Erstellen Sie einfach eine neue 32-Bit-VM und kompilieren Sie sie dort.
Antwort2
Ist es auf ausführbar eingestellt? Wenn nicht, dann chmod +x filename
. Befindet es sich in Ihrem PATH? Wenn nicht, dann rufen Sie es als auf, ./filename
statt nur filename
.
Antwort3
Wenn Sie versuchen, eine Datei auszuführen und Bash sagt, dass sie nicht existiert, bedeutet das manchmal, dass Bash glaubt, die Datei sei ein Skript und dass der in der ersten Zeile (#!) angegebene Interpreter nicht existiert.
Wenn die Datei benannt ist, mkdep
würde ich die Ausgabe von veröffentlichen
./mkdep
file mkdep
hd mkdep | head
strace ./mkdep 2>mkdep.strace.txt
Der Befehl strace gibt Informationen über getätigte Systemaufrufe und strace ls 2>ls.t
fügt beispielsweise Folgendes in ls.t ein
execve("/bin/ls", ["ls"], [/* 22 vars */]) = 0 brk(0) = 0x8061000 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (Keine solche Datei oder kein solches Verzeichnis) mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f82000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (Keine solche Datei oder kein solches Verzeichnis) öffnen("/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 schließen(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (Keine solche Datei oder kein solches Verzeichnis) öffnen("/lib/librt.so.1", O_RDONLY) = 3 lesen(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
Antwort4
Ändern Sie IFS in Ihrem Skript? Ich hatte in einem meiner Skripte dasselbe Problem und dachte das Gleiche (32-Bit-Datei wird von Shell-Skript auf 64-Bit-Maschine gelesen). Aber das war in meinem Fall nicht das Problem. Stattdessen habe ich IFS in ein Komma ,‘ und zurück in eine neue Zeile geändert, was den Parser irgendwie verwirrte und diesen Fehler verursachte.
Ich habe einfach alle Änderungen in IFS entfernt und jetzt funktioniert es einwandfrei!!!