Mi código para crear un script ejecutable
touch script.sh && echo "echo 'Hello World'" > script.sh && sudo chmod +x script.sh
Mi código para crear un script ejecutable
touch script.sh && echo "echo 'Hello World'" > script.sh && sudo chmod +x script.sh
Respuestas:
Puede omitir todo el touch
comando y no hay necesidad de usarlo sudo
. Para acortar aún más la línea de comando, puede usar la bash
expansión de historial para guardar el nombre de archivo por segunda vez y omitir espacios innecesarios:
echo "echo 'Hello World'" >script.sh&&chmod +x !#:3
La expansión del historial se reemplaza !#:3
con la cuarta palabra de la línea de comando actual, que en su caso es el nombre del archivo script.sh
. Por supuesto, esto debe adaptarse en caso de que modifique el primer comando, por ejemplo:
>script.sh echo "echo 'Hello World'"&&chmod +x !#:1
Tenga en cuenta que un script válido necesita un shebang :
>script.sh echo -e "#!/bin/bash\necho 'Hello World'"&&chmod +x !#:1
Si necesita esta cadena de comandos con más frecuencia, le recomiendo que defina una función , de esta manera solo necesitará escribir el nombre de la función. Una forma igualmente adaptable, aunque más larga, es el uso de una variable que contenga el nombre del archivo:
f=script.sh;>$f echo "echo 'Hello World'"&&chmod +x $f
Si su nombre de archivo contiene caracteres especiales, no olvide citarlos correctamente .
El install
comando (parte de GNU junto con coreutils cp
, mv
, rm
, etc.) puede copiar un archivo al mismo tiempo que el establecimiento de su propiedad y los permisos y la creación de directorios padre si es necesario. Por defecto hará que el nuevo archivo sea ejecutable. No entiende ' -
' pero /dev/stdin
puede usarse en su lugar:
install /dev/stdin script.sh <<< "echo Hello World"
Lo anterior usa una ' cadena aquí ' para proporcionar el texto en stdin, que es un poco más corto que ponerlo. Los argumentos para echo
no necesitar comillas a menos que contengan caracteres con un significado especial.
install <(echo echo Hello World) script.sh
Prefiero usar cat
para tareas como esta:
cat > script.sh && chmod +x script.sh
#!/bin/sh
echo 'Hello World'
Enter
Ctrl+D
También puede omitir todo el chmod y usar umask en su lugar antes del eco. Debería ahorrarte unos pocos bytes. Shebang es opcional siempre que use comandos que todos los shell entienden (bourne y C principalmente).
umask
para configurar el bit ejecutable de forma predeterminada ...
sudo
con moderación. Tener el hábito de tirarlo puede ser peligroso. En este caso, usted posee el script que creó para que pueda hacer lo que quiera con los permisos, sin necesidad de sudo.