Comment puis-je exécuter un fichier sans me donner les autorisations d'exécution (avec chmod u+x
) pour lui?
Si j'essaie de cocher la case «Autoriser l'exécution du fichier en tant que programme», la coche est immédiatement supprimée.
Comment puis-je exécuter un fichier sans me donner les autorisations d'exécution (avec chmod u+x
) pour lui?
Si j'essaie de cocher la case «Autoriser l'exécution du fichier en tant que programme», la coche est immédiatement supprimée.
Réponses:
Veuillez le faire avant toute autre chose (sauf si vous êtes sûr de posséder le fichier).
Vérifiez et assurez-vous que vous possédez le fichier que vous essayez d'exécuter avec l'une des méthodes suivantes.
Exécutez cette commande dans un terminal
[ ! -O "/path/to/file" ] && echo "You don't own the file"
You don't own the file
", voir "Modifier la propriété du fichier" ci-dessous.Exécutez cette commande dans un terminal
sudo chown $USER:$(id -gn $USER) "/path/to/file"
Une réponse que j'ai trouvée à partir d'un commentaire de Lekensteyn sur une réponse à une question sur chmod
les partitions NTFS qui, je pense, mérite ses propres questions et réponses, tout à l'honneur de Lekensteyn.
Utilisez cette commande pour les fichiers exécutables (en les remplaçant /path/to/executable
par le chemin correct):
Fichiers exécutables 64 bits:
/lib64/ld-linux-x86-64.so.2 /path/to/executable
Fichiers exécutables 32 bits:
/lib/ld-linux.so.2 /path/to/executable
Si ce qui précède ne fonctionne pas (ou déclenche des erreurs de fichier introuvable), essayez de l'utiliser avant la commande ci-dessus
cd "$(dirname /path/to/executable)"
Toutes les commandes ci-dessus ne fonctionneront pas pour les scripts basés sur du texte (Bash, Python, Perl, etc.), voir ci-dessous.
Utilisez cette commande pour savoir si un exécutable est de 32 ( x86
) ou 64 ( x86-64
) bits
objdump -f "$file" | grep '^architecture' | cut -d, -f1 | sed 's/architecture: //'
Si cela dit i386:x86-64
, c'est 64 bits. S'il dit i386
seulement, c'est 32 bits.
Pour les scripts basés sur du texte (Bash, Python, Perl, etc.), vous devez utiliser la commande spécifiée dans la première #!
ligne du fichier.
Par exemple, si la première ligne du fichier est
#!/usr/bin/env python3
puis exécutez ces commandes dans un terminal (en les remplaçant /path/to/file
par le chemin correct)
cd "$(dirname /path/to/file)" # Not strictly necessary, see section below
# Replace '/usr/bin/env python3' with the first line without the front #!
/usr/bin/env python3 /path/to/file # Use './file' if you want
.jar
Fichiers JavaPour les fichiers jar exécutables Java, vous pouvez simplement utiliser ces commandes (en les remplaçant /path/to/jar
par le chemin correct):
cd "$(dirname /path/to/jar)" # Not strictly necessary, see section below
java -jar /path/to/jar
cd "$(dirname /path/to/file)"
Ce sont des circonstances possibles où vous n'aurez pas besoin d'utiliser cd "$(dirname /path/to/file)"
avant d'exécuter le programme avec n'importe quelle méthode: Si au moins une est vraie, vous n'aurez pas besoin en cd
premier.
apt-get
)cd
(ou équivalent) pour passer à un chemin absolu avant d' effectuer des opérations de fichiers ( par exemple: cd "$(dirname "$0")"
)./
ou commençant sans barre oblique)En cas de doute, ajoutez cd "$(dirname "$0")"
(ou l'équivalent) en haut du script (le cas échéant) ou utilisez cd "$(dirname /path/to/file)"
quand même.
S'il s'agit d'un script shell, vous pouvez le "source" à partir d'un autre script shell, c'est-à-dire:
#!/bin/bash
# This script runs another script indirectly, by sucking in its contents and evaluating inline:
source /path/to/script/which/lost/its/exec/flag "$@"
Le "$ @" ajoute les paramètres de ligne de commande, si nécessaire.
Cela dit, ce n'est probablement pas la meilleure solution pour le problème sous-jacent, mais nous n'en savons pas assez sur ce problème pour proposer des alternatives.
bash script $@