hacer que un script bash sea ejecutable programáticamente

12

Necesito crear un script bash para crear y montar una unidad. Entonces, dos comandos simples. Ambos "funcionan" cuando se ingresan en la línea de comando.

El script se crea y ejecuta cada vez que un usuario normal inicia sesión, por lo que necesito un método para hacer que este script sea ejecutable en ese momento. Hasta ahora, no puedo hacer que esto funcione. Por ejemplo, la primera parte mkdir /vvv/ggggno continúa porque el script no es ejecutable (supongo).

Espero que esto tenga sentido. es posible? Cualquier idea sobre cómo hacer que esto funcione será apreciada.

Actualización :

Gracias por sus respuestas Probablemente debería agregar información adicional además de que soy nuevo en Linux.

Estoy usando una aplicación de escritorio virtual de código abierto llamada Ulteo. Esta aplicación se ejecuta sobre Ubuntu y tiene muy poco soporte, por eso estoy aquí. Básicamente, estoy aprendiendo por fuego.

Entonces, la aplicación tiene una función de administración de script de inicio de sesión donde puedo vincular un script a un usuario. Un script simple de Windows con uso neto funciona perfectamente bien. Sin embargo, cuando trato de aplicar un script bash de Linux no sucede nada.

Estoy pensando que debido a que chmod +xprimero necesito realizar un script contra el script para que el script sea ejecutable, esta es la razón por la cual falla. Por cierto, Ulteo corre en una cárcel chroot. Creé un script, lo guardé y no pude encontrar el script. Busqué tanto dentro como fuera de la cárcel chroot.

Me gusta el enfoque de dan08 para que la secuencia de comandos inicial haga referencia a otra secuencia de comandos que puedo encontrar y hacer que sea ejecutable manualmente. ¿Me encontraría con el mismo problema?

¿Esta información adicional aclara la situación? Gracias por adelantado.

Fotos adjuntas.

! [iniciar sesión consola de administración scipt] [1]

[guiones de Windows que funcionan] [2]

! [script de Linux simple que no funciona] [3]

Lo siento, no puedo publicar imágenes todavía

Dinámica de Hilton
fuente
¿Va a escribir un trabajo cron para ejecutar el script cada vez que un usuario inicie sesión? Esta guía también debería ayudarlo a hacerlos ejecutables .
Sleep Privado Bulbasaur
1
"El script se crea y ejecuta cada vez que un usuario normal inicia sesión" ¿por qué? Solucionaría esto ya que no me parece lógico. Alimentaría el script al usuario como parámetro y dejaría el script intacto después de creado.
Rinzwind
1
Hay una extraña combinación de tiempos en la pregunta que me deja confundido sobre lo que sucede actualmente y lo que le gustaría que hiciera. Sería útil si pudiera ser un poco más específico sobre cuál es la situación actual.
Oli
Por favor, editar su pregunta y nos muestran la secuencia de comandos. También nos muestran la salida de ls -l scriptname. También debe aclarar cómo se crea exactamente el script y por qué no solo lo crea una vez y lo deja solo. Finalmente, su usuario normal no debería tener acceso de escritura /vary, por lo tanto, no debería poder crear directorios allí.
terdon
1
Publique los enlaces de la imagen en los comentarios. Los importaremos mediante ediciones (sugeridas).
muru

Respuestas:

19

Hay dos cosas que debes hacer:

  1. Consulte al intérprete de guiones al comienzo del guión:

    #!/bin/bash
  2. Establezca los permisos para hacerlo ejecutable:

    chmod +x myscript.sh
Ed Manet
fuente
3

En lugar de hacer que su script sea ejecutable, puede adoptar un enfoque diferente y cambiar la forma en que llama al script.

script.sh es suficiente para ejecutar un script ejecutable.

sin embargo

Es posible ejecutar un script no ejecutable si especifica el programa para ejecutarlo.

So /bin/bash script.sho bash script.shor python script.pyejecutarán scripts no ejecutables.

Por lo tanto, mi sugerencia sería editar la forma en que se llama el script y especificar el binario utilizado para ejecutarlo.

Dan
fuente
Por mi parte, generalmente los hago ejecutables, porque si no lo haces, no puedes volver a lanzar el archivo desde sí mismo. Como ejemplo, Python os.execv(__file__, sys.argv)no funcionaría, y seguramente hay más situaciones como esa. Si la seguridad es un objetivo, simplemente utilícelo desde root / sudo, en lugar de eso, permita que los usuarios ejecuten binarios. Además, si el objetivo es la seguridad, no desea que puedan ejecutar scripts, porque de todos modos puede dañar el sistema ... ejecutable o no. Así que no veo por qué es importante evitar hacerlos ejecutables.
m3nda
0

Cree un programa en C, C ++ o Python, etc. y use el comando del sistema para ejecutar el script bash.

Por ejemplo, un programa en C se vería así:

#include "stdio.h"
int main(int argc, char const *argv[])
{
    system('chmod +x path/yourbashscript.sh');
    system('path/yourbashscript.sh');
    return 0;
}

Para ejecutar el programa al inicio, agréguelo a la lista de programas de inicio. Abra las Aplicaciones de inicio desde su tablero y agregue el ejecutable compilado a la lista haciendo clic en el botón Agregar.

akxer
fuente
2
-1: Esto no es realmente una respuesta. ¿Por qué Python sería mejor que un script de shell? Y mucho menos C! En cualquier caso, en realidad no está mostrando cómo se vería este programa y no está explicando cómo agregar un programa a la lista de programas de inicio.
terdon
La respuesta a la primera pregunta se puede dar por explicar cómo un lenguaje de programación es diferente de un lenguaje de programación como para el resto He editado mi respuesta
akxer
Gracias por la edición, -1 eliminado. Sin embargo, usar un programa C para lanzar un script de shell en Linux es completamente innecesario y agrega una sobrecarga innecesaria. ¿Por qué no simplemente agregar el script en sí a las aplicaciones de inicio? O, si realmente quieres usar C, ¿por qué no implementarlo directamente? Crear un contenedor en C que llame a un script de shell en Linux no tiene ningún sentido a menos que necesite que el script se ejecute con el conjunto de bits SUID. Incluso en ese caso, generalmente hay soluciones más simples.
terdon
1
-1: Esto todavía fallaría si el script no tuviera permisos de ejecución. Tendrías que llamar bash path/yourbashscript.sh.
muru
1
Lo que plantea la pregunta, ¿por qué no ejecutar bash path/yourbashscript.shdirectamente en lugar de compilar y ejecutar este programa C?
muru
0

Puede hacer que su script bash sea ejecutable ejecutando lo siguiente en la línea de comando.

cd ~/path/to/file
chmod +x nameoffile.sh

Luego, hacer que se ejecute al inicio se puede hacer agregándolo a su lista de programas de inicio como dijo @akabhirav.

LanceLafontaine
fuente
Me parece que la pregunta (un tanto) muestra que está familiarizado con la forma de chmod. Pero está pidiendo un método para hacerlo ejecutable desde el propio script (por lo que no tiene que hacerlo manualmente). Aunque todavía cuestiono el método: recrear un script sobre la marcha no es la forma de hacerlo.
Rinzwind
0

SHC es un compilador genérico de script de shell. Toma una secuencia de comandos, que se especifica en la línea de comando y produce el código fuente C. El código fuente generado se compila y se vincula para producir un binario eliminado.

El binario compilado seguirá dependiendo del shell especificado en la primera línea del código del shell (shebang: #!/bin/sho tal), por lo que SHC no crea binarios completamente independientes.

SHC en sí no es un compilador como cc. En cambio, codifica y cifra un script de shell y genera código fuente C con la capacidad de caducidad añadida. Luego usa el compilador del sistema para compilar un binario eliminado que se comporta exactamente como el script original. Tras la ejecución, el binario compilado descifrará y ejecutará el código con la -copción del shell .

Jhosman
fuente
¿Cuál es el punto de esto si el ejecutable aún requiere el entorno de shell original? ¿Cómo es esto mejor que simplemente agregar un #!y chmod +x?
xiota