Cómo hacer que un archivo (por ejemplo, un script .sh) sea ejecutable, para que pueda ejecutarse desde un terminal

245

Tengo un archivo script.sh y el tipo de este archivo es shellscript. Quiero hacer este archivo como archivo de aplicación / x-ejecutable. ¿Cómo puedo hacerlo?

Ziyaddin Sadigov
fuente
1
Posible duplicado de ¿Cómo ejecuto archivos .sh?
karel
No es un duplicado, porque he preguntado específicamente sobre cómo hacer que sea ejecutable en la aplicación / x. La otra pregunta solo pide abrir el archivo sh en la terminal.
Ziyaddin Sadigov

Respuestas:

326

Puede marcar el archivo como ejecutable:

chmod +x filename.sh

Luego puede ejecutarlo así:

./filename.sh

Si desea utilizar un comando diferente para iniciarlo, puede agregar un alias:

gedit ~/.bashrc

Agregue esto al final del archivo:

alias <new name>='/home/<full path to script>/filename.sh'

Abra una nueva sesión de terminal o escriba source ~/.bashrcsu terminal para aplicar. Luego, simplemente use el nuevo nombre para iniciar el script.

rɑːdʒɑ
fuente
¿Sabes cómo usar el comando sudo después de ingresar el comando como: "alias command1 = '/home/user_name/dir/script.sh'. En el mío, funciona sin sudo, pero no con él.
Aditya
Debe reiniciar bash después de editar .bashrc run: exec bash para reiniciar bash.
Sampath Perera
2
¿Por qué el archivo ejecutable es ./filename.shy no solo filename.sh?
user1993
@ user1993 sí, también estoy buscando una manera de hacerlo ejecutable solo por filenamey no./filename
MycrofD
@ user1993 Generalmente, el uso ./filename.shespecifica un archivo en el directorio actual y el uso filename.shespecifica un archivo en el directorio actual o en cualquier directorio de PATH. El primer uso elimina cualquier incertidumbre sobre a qué archivo se accede. En este caso, está intentando ejecutar el script con bash u otro intérprete (en virtud de asumir #!/bin/bashcomo primera línea en su script) simplemente ingresando el nombre del archivo. Este uso requiere que se especifique el directorio. Alternativamente, puede probar bash filename.shcuál parece funcionar con un directorio no especificado.
a505999
37

Hay dos formas de hacer que un archivo sea ejecutable:

Método GUI:

Vaya a la pestaña de permisos, luego marque la casilla `Ejecutar: [] Permitir ejecutar el archivo como programa.

ingrese la descripción de la imagen aquí

Método de terminal / comando:

Puedes usar:

cd /to/my/required/directory

Entonces corre

chmod +x filename.extension

O simplemente ejecuta:

chmod +x /path/to/your/filename.extension

chmod también tiene algunas opciones más avanzadas:

Los espacios son para mostrar que está dividido: - rwx --- ---

El primer conjunto de ---es Usuario. El segundo es Grupo y el último es Otro (cualquier otra persona)

r significa lectura, w para escritura yx para eXecute.

Entonces, para permitir que todos lo lean, pero solo el Grupo para ejecutarlo y el Usuario para leerlo y escribirlo (pero por alguna razón no ejecutarlo) sería:

-rw- rx- r-- Pero esto se agregaría al comando como:

chmod +rw-rx-r-- /path/to/file.extension

chmodTambién puede hacer esto en números. Está basado en binario (creo que es 1,2 y 4)

Entonces hay estos números:

Ejecutar por usuario es 100. Ejecutar por grupo es 010. Ejecutar por otro es 001

Escribir por usuario es 200. Escribir por grupo es 020. Escribir por otro es 002.

Leído por el usuario es 400. Leer por grupo es 040. Leer por otro es 004.

Luego los sumas para obtener la combinación deseada.

Entonces, para permitir que todos lo lean, pero solo Group para ejecutarlo y User para escribirlo (pero por alguna razón no ejecutar) sería:

400 + 040 + 004y 010y200

Eso suma 600 + 050 + 004 = 654.

Entonces podría ejecutar el comando.

chmod +654 /path/to/file.extension para configurarlo

Y para configurar todos los permisos, puede escribir:

chmod +rwxrwxrwx /path/to/file.extension

O (esto es un poco más fácil de escribir, pero más difícil de recordar cada uno):

chmod +777 /path/to/file.extension

Finalmente, puedes hacer:

chmod -777 /path/to/file.extension

Para quitar todos los permisos de todos.

Y:

chmod +300 /path/to/file.extension

Para agregar lectura y escritura para el usuario, sin afectar ningún otro permiso (por ejemplo, permisos de ejecución).

Este sitio web tiene una pequeña casilla de verificación de cuadrícula muy útil, en la que puede marcar las opciones que desee y le da el comando:

ingrese la descripción de la imagen aquí

Sin embargo, no todas las combinaciones posibles son razonables de usar; Los principales que se utilizan son los siguientes:

755 - Ownertiene todo, Groupy Otherpuede leer y ejecutar

700 - Ownertiene todo

644 - Ownerpuede leer y escribir, Groupy Otherpuede leer

600 - Ownerpuede leer y escribir

Y, si está utilizando grupos de usuarios no triviales:

775 - Ownerpuede leer y escribir, Groupy Otherpuede leer

770 - Ownery Grouptiene todo, y Otherpuede leer y ejecutar

750: Ownertiene todo y Grouppuede leer y ejecutar

664 - Ownery Grouppuede leer y escribir, y Othersolo puede leer

660 - Ownery Grouppuede leer y escribir

640 - Ownerpuede leer y escribir, y Grouppuede leer

777 y 666 rara vez se usan, excepto en / tmp.

¡Gracias Ilmari Karonen por señalar los de uso común!

Tim
fuente
¿No se basa en octal (8 bases) en lugar de binario (basado en 2)? En binario solo puede tener 0 y 1, mientras que en octal puede tener 0, 1, ... 6, 7
Justinas
@Justinas binario en que 7 = 4 + 2 + 1 - 111 representa lectura y escritura y ejecución.
Tim
8

Correr:

chmod +x /path/to/file.sh

Para hacerlo no ejecutable, ejecute:

chmod -x /path/to/file.sh

Por ejemplo, creé el .sharchivo:

vi tester12.sh

Después de escribir un código en el editor vi, saldré del editor vi:

:wq!
chmod +x tester12.sh
./tester12.sh
Jim
fuente