J'essaie de compiler le firmware de mon linksys WRVS4400N.
lsmontre qu'il existe mais quand il essaie de l'exécuter, bash dit qu'il n'existe pas. Je peux aussi le catfaire, et c'est un exécutable, pas un script shell.
J'essaie de compiler le firmware de mon linksys WRVS4400N.
lsmontre qu'il existe mais quand il essaie de l'exécuter, bash dit qu'il n'existe pas. Je peux aussi le catfaire, et c'est un exécutable, pas un script shell.
Réponses:
Vous avez mentionné que la sortie de file mkdepest 32-bit elf. Vous exécutez une machine virtuelle 64 bits.
Exemple:
$ 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
Créez simplement une nouvelle machine virtuelle 32 bits et compilez-la.
Est-il configuré pour être exécutable? Sinon, alors chmod +x filename. Est-ce dans votre CHEMIN? Sinon, appelez-le ./filenameplutôt que juste filename.
Lorsque vous essayez d'exécuter un fichier et que bash dit qu'il n'existe pas, cela signifie parfois que bash pense que le fichier est un script et que l'interpréteur spécifié dans la première ligne (#!) N'existe pas.
Si les fichiers sont nommés, mkdepje publierais la sortie de
./mkdep
file mkdep
hd mkdep | head
strace ./mkdep 2>mkdep.strace.txt
La commande strace donne des informations sur les appels système effectués, par exemple strace ls 2>ls.tmet les éléments suivants dans ls.t
execve ("/ bin / ls", ["ls"], [/ * 22 vars * /]) = 0
brk (0) = 0x8061000
access ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (Aucun fichier ou répertoire de ce type)
mmap2 (NULL, 8192, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) = 0xb7f82000
access ("/ etc / ld.so.preload", R_OK) = -1 ENOENT (Aucun fichier ou répertoire de ce type)
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
fermer (3) = 0
access ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (Aucun fichier ou répertoire de ce type)
open ("/ lib / librt.so.1", O_RDONLY) = 3
lire (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
strace ./mkdep 2>mkdep.strace.txtceci devrait vous donner une idée de ce qui se passe. Vous devrez peut-être installer strace à partir des référentiels.
Modifiez-vous IFS dans votre script? Moi aussi, j'ai rencontré le même problème dans l'un de mes scripts et j'ai pensé la même chose (fichier 32 bits lu par script shell sur une machine 64 bits). Mais ce n'était pas le problème dans mon cas. Au lieu de cela, je remplaçais IFS par une virgule '' et reviens à une nouvelle ligne qui a en quelque sorte confondu l'analyseur et provoqué cette erreur.
Je viens de supprimer tout changement dans IFS et cela fonctionne très bien maintenant !!!