without - ¿Cómo ejecuto un script de shell sin usar los comandos "sh" o "bash"?
nopasswd sudo command (8)
Agregar (directorio actual) a su variable PATH.
Puede hacerlo editando su archivo .profile.
ponga la siguiente línea en su archivo .profile
PATH=$PATH:.
Solo asegúrate de agregar la línea Shebang ( #!/bin/bash
) al inicio de tu script y haz que el script sea ejecutable (usando chmod +x <File Name>
).
Tengo un script de shell que quiero ejecutar sin usar los comandos "sh" o "bash". Por ejemplo:
En lugar de: sh script.sh
Quiero usar: script.sh
¿Cómo puedo hacer esto?
PD (i) No uso demasiado el script de shell e intenté leer acerca de los alias, pero no entendí cómo usarlos.
(ii) También leí acerca de vincular el script con otro archivo en las variables PATH. Estoy usando mi servidor de la universidad y no tengo permisos para crear un archivo en esas ubicaciones.
Agregue un "shebang" en la parte superior de su archivo:
#!/bin/bash
Y haz que tu archivo sea ejecutable ( chmod +x script.sh
).
Finalmente, modifique su ruta para agregar el directorio donde se encuentra su script:
export PATH=$PATH:/appropriate/directory
(normalmente, desea $HOME/bin
para almacenar sus propios scripts)
Aquí está mi script de copia de seguridad que le dará la idea y la automatización:
Servidor: Ubuntu 16.04 PHP: 7.0 Apache2, Mysql, etc.
# Make Shell Backup Script - Bash Backup Script
nano /home/user/bash/backupscript.sh
#!/bin/bash
# Backup All Start
mkdir /home/user/backup/$(date +"%Y-%m-%d")
sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_rest.zip /etc -x "*apache2*" -x "*php*" -x "*mysql*"
sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_apache2.zip /etc/apache2
sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_php.zip /etc/php
sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_mysql.zip /etc/mysql
sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/var_www_rest.zip /var/www -x "*html*"
sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/var_www_html.zip /var/www/html
sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/home_user.zip /home/user -x "*backup*"
# Backup All End
echo "Backup Completed Successfully!"
echo "Location: /home/user/backup/$(date +"%Y-%m-%d")"
chmod +x /home/user/bash/backupscript.sh
sudo ln -s /home/user/bash/backupscript.sh /usr/bin/backupscript
cambia / home / user a tu directorio de usuario y escribe: backupscript en cualquier parte del terminal para ejecutar el script. (suponiendo que / usr / bin esté en su camino)
En este ejemplo, el archivo se llamará myShell
Antes que nada tendremos que hacer este archivo, podemos comenzar escribiendo lo siguiente:
sudo nano myShell
¿Notamos que no pusimos la extensión .sh
? ¡Eso es porque cuando lo ejecutamos desde la terminal solo necesitaremos escribir myShell
para ejecutar nuestro comando!
Ahora, en nano la línea superior DEBE ser #!/bin/bash
entonces puede dejar una nueva línea antes de continuar.
Para la demostración, agregaré un Hello World!
básico Hello World!
respuesta
Entonces, escribo lo siguiente:
echo Hello World!
Después de eso mi ejemplo debería verse así:
#!/bin/bash echo Hello World!
Ahora guarde el archivo y luego ejecute este comando:
sudo chmod +x myShell
Ahora que hemos hecho el archivo ejecutable podemos moverlo a /usr/bin/
usando el siguiente comando:
sudo cp myShell /usr/bin/
Solo para asegurarnos de que la máquina pueda ejecutarla correctamente, tendremos que reiniciar la máquina
Utilicé sudo shutdown -r now
Felicidades! Nuestro comando ahora está listo! En la terminal podemos escribir myShell
y debería decir Hello World!
Feliz codificación!
Estos son algunos de los requisitos previos para usar directamente el nombre del script:
- Agregue la línea
sha-bang {#!/bin/bash)
en la parte superior. - El uso de
chmod u+x scriptname
hace que el script sea ejecutable. - Coloque la secuencia de comandos en la carpeta
/usr/local/bin
. - Ejecute el script usando solo el nombre del script.
Nota: La razón por la que sugerí colocarlo en la carpeta /usr/local/bin
es porque lo más probable es que la ruta ya se haya agregado a su PATH variable
.
Actualizar:
Si no tiene acceso a la carpeta /usr/local/bin
, haga lo siguiente:
- Cree una carpeta en su directorio de inicio y vamos a llamarlo
myscripts
. - Haga
ls -lart
en el directorio de inicio para identificar el script de inicio que está usando su shell. Debe ser.profile
o.bashrc
. - Una vez que haya identificado el script de inicio, agregue la siguiente línea en su script -
export set PATH=$PATH:~/myscript
. - Una vez agregado, ingrese el script de inicio o cierre la sesión y vuelva a iniciar sesión.
- Ejecute su script usando el nombre del script.
Puede escribir sudo install (nombre del script) / usr / local / bin / (lo que desea escribir para ejecutar dicho script)
ex: sudo install quickcommit.sh /usr/local/bin/quickcommit
ingrese la contraseña
ahora puede ejecutarse sin .sh y en cualquier directorio
Solo asegúrate de que sea ejecutable, usando chmod +x
. De forma predeterminada, el directorio actual no está en su RUTA, por lo que deberá ejecutarlo como ./script.sh
, o bien hacer referencia a él mediante una ruta calificada. Alternativamente, si realmente necesita simplemente script.sh
, deberá agregarlo a su RUTA. (Puede que no tenga acceso para modificar la ruta del sistema, pero es casi seguro que puede modificar la RUTA de su propio entorno actual.) Esto también asume que su secuencia de comandos comienza con algo como #!/bin/sh
.
También podría seguir usando un alias, que no está realmente relacionado con las secuencias de comandos del shell, sino solo el shell, y es simple como:
alias script.sh=''sh script.sh''
Lo cual le permitiría usar simplemente script.sh
(literalmente, esto no funcionará para ningún otro archivo *.sh
) en lugar de sh script.sh
.
Tienes que habilitar el bit ejecutable para el programa.
chmod +x script.sh
Entonces puedes usar ./script.sh
Puede agregar la carpeta a la RUTA en su archivo .bashrc
(ubicado en su directorio de inicio). Agregue esta línea al final del archivo:
export PATH=$PATH:/your/folder/here