Bash dit que le fichier n'existe pas, mais qu'il existe

11

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.

Avery3R
la source
quelle est la sortie de ls -la pour ce fichier particulier?
user389238
@Ansis -rwxrwxrwx 1 1011 1011 31991 18 mai 2006 mkdep
Avery3R
1
montrez-nous la ligne de votre script et le message d'erreur exact. Quel est votre répertoire actuel lorsque vous essayez d'appeler le fichier "manquant"?
glenn jackman
@glenn Ce n'est pas mon script qui l'invoque, c'est le makefile de cisco, je ne peux pas obtenir le message d'erreur exact car il s'exécute dans un vm, mais, bash: fichier / dossier / pathto / mkdep introuvable
Avery3R
C'est donc là que ces trolls se cachent ...
Percée

Réponses:

8

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.

bahamat
la source
1
Si vous installez ia32-libs, cela devrait fonctionner par la suite. Pas besoin de créer une VM 32 bits.
Phil
5

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.

frabjous
la source
Son 'mis à exécutable, j'ai fait ./mkdep pour l'appeler ainsi que l'utilisation du chemin complet, pas de dés.
Avery3R
Vous devrez peut-être exécuter le fichier en tant que sudo.
D'Arvit
2

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
RedGrittyBrick
la source
(exécuté sur vm, trop paresseux pour tout taper) ./mkdep renvoie un fichier ou un dossier introuvable. fichier mkdep retourne un exe elfe 32 bits, et head mkdep retourne des données binaires
Avery3R
1
mkdep génère probablement ce message car il ne trouve pas le fichier dont il a besoin ??
Linker3000
@ linker3000: Non, il dit Bash: / dirto / mkdep: fichier ou dossier introuvable
Avery3R
@MMavipc: essayez 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.
RedGrittyBrick
1

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 !!!

Abhijit Buchake
la source