¿Cómo puedo ejecutar un archivo sin darme permisos de ejecución (con chmod u+x
) para él?
Si trato de marcar la marca de verificación 'Permitir ejecutar archivo como programa', la marca de verificación se elimina inmediatamente.
¿Cómo puedo ejecutar un archivo sin darme permisos de ejecución (con chmod u+x
) para él?
Si trato de marcar la marca de verificación 'Permitir ejecutar archivo como programa', la marca de verificación se elimina inmediatamente.
Respuestas:
Haga esto antes de cualquier otra cosa (a menos que esté seguro de ser el propietario del archivo).
Compruebe y asegúrese de poseer el archivo que está intentando ejecutar con uno de los siguientes métodos.
Ejecute este comando en una terminal
[ ! -O "/path/to/file" ] && echo "You don't own the file"
You don't own the file
", consulte "Cambiar la propiedad del archivo" a continuación.Ejecute este comando en una terminal
sudo chown $USER:$(id -gn $USER) "/path/to/file"
Una respuesta que encontré de un comentario de Lekensteyn sobre una respuesta a una pregunta sobre las chmod
particiones NTFS que creo que merece su propia pregunta y respuesta, crédito total a Lekensteyn.
Use este comando para archivos ejecutables (sustituyendo /path/to/executable
con la ruta correcta):
Archivos ejecutables de 64 bits:
/lib64/ld-linux-x86-64.so.2 /path/to/executable
Archivos ejecutables de 32 bits:
/lib/ld-linux.so.2 /path/to/executable
Si lo anterior no funciona (o genera errores de archivo no encontrado), intente usar esto antes del comando anterior
cd "$(dirname /path/to/executable)"
Todos los comandos anteriores no funcionarán para los scripts basados en texto (Bash, Python, Perl, etc.), ver más abajo.
Use este comando para averiguar si un ejecutable es de 32 ( x86
) o 64 ( x86-64
) bits
objdump -f "$file" | grep '^architecture' | cut -d, -f1 | sed 's/architecture: //'
Si dice i386:x86-64
, entonces es de 64 bits. Si solo dice i386
, entonces es de 32 bits.
Para los guiones basados en texto (Bash, Python, Perl, etc.), debe usar el comando especificado en la primera #!
línea del archivo.
Por ejemplo, si la primera línea del archivo es
#!/usr/bin/env python3
luego ejecute estos comandos en una terminal (sustituyendo /path/to/file
con la ruta correcta)
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
Archivos JavaPara los jar ejecutables de Java, simplemente puede usar estos comandos (sustituyendo /path/to/jar
con la ruta correcta):
cd "$(dirname /path/to/jar)" # Not strictly necessary, see section below
java -jar /path/to/jar
cd "$(dirname /path/to/file)"
Estas son posibles circunstancias en las que no necesitará usar cd "$(dirname /path/to/file)"
antes de ejecutar el programa con cualquier método: si al menos uno es verdadero, no necesitará cd
primero.
apt-get
)cd
(o equivalente) para cambiar a una ruta absoluta antes de realizar cualquier operación de archivo (ejemplo: cd "$(dirname "$0")"
)./
o sin barra)Si no está seguro, agregue cd "$(dirname "$0")"
(o equivalente) a la parte superior del script (si corresponde) o use de cd "$(dirname /path/to/file)"
todos modos.
Si se trata de un script de shell, puede "obtenerlo" de otro script de shell, es decir:
#!/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 "$@"
El "$ @" agrega los parámetros de la línea de comando, si es necesario.
Dicho esto, probablemente esta no sea la mejor solución para el problema subyacente, pero no sabemos lo suficiente sobre ese problema para ofrecer alternativas.
bash script $@