J'essaie de compiler le microprogramme pour mes linksys WRVS4400N.
ls
montre qu'il existe mais quand il tente de l'exécuter bash dit qu'il n'existe pas. Je peux aussi le cat
, et c'est un exécutable, pas un script shell.
Vous avez mentionné que la sortie du file mkdep
est 32-bit elf
. Vous utilisez 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
Il suffit de créer une nouvelle VM 32-bit et de la compiler là-bas.
Est-il configuré pour être exécutable? Sinon, puis chmod +x filename
. Est-ce dans votre PATH? Sinon, appelez-le comme ./filename
plutôt que comme filename
.
Lorsque vous essayez d'exécuter un fichier et que bash indique qu'il n'existe pas, cela signifie parfois que bash croit que le fichier est un script et que l'interprète spécifié dans la première ligne (#!) N'existe pas.
Si les fichiers s'appellent mkdep
je mkdep
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 le suivant dans ls.t
Execve ("/ bin / ls", ["ls"], [/ * 22 vars * /]) = 0 Brk (0) = 0x8061000 Accès ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (aucun fichier ou répertoire) Mmap2 (NULL, 8192, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) = 0xb7f82000 Accès ("/ etc / ld.so.preload", R_OK) = -1 ENOENT (Aucun fichier ou répertoire de ce type) Ouvert ("/ 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 Accès ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (aucun fichier ou répertoire) Ouvert ("/ 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
Changez-vous IFS dans votre script? J'ai également rencontré le même problème dans l'un de mes scripts et pensé le même (fichier 32 bits lue par script shell sur 64 bits). Mais ce n'était pas le problème dans mon cas. Au lieu de cela, je changeais IFS en virgule ', et revenir à une nouvelle ligne qui a quelque peu confondu l'analyseur et provoqué cette erreur.
Je viens de supprimer tout changement dans IFS et ça marche bien maintenant !!!