J'essaie de compiler le firmware de mon linksys WRVS4400N.
ls
montre qu'il existe mais quand il essaie de l'exécuter, bash dit qu'il n'existe pas. Je peux aussi le cat
faire, et c'est un exécutable, pas un script shell.
J'essaie de compiler le firmware de mon linksys WRVS4400N.
ls
montre qu'il existe mais quand il essaie de l'exécuter, bash dit qu'il n'existe pas. Je peux aussi le cat
faire, et c'est un exécutable, pas un script shell.
Réponses:
Vous avez mentionné que la sortie de file mkdep
est 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 ./filename
plutô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, mkdep
je 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.t
met 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.txt
ceci 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 !!!