web-dev-qa-db-fra.com

Existe-t-il un moyen de créer un script et de le rendre exécutable avec moins de code que cela?

Mon code pour créer un script exécutable

touch script.sh && echo "echo 'Hello World'" > script.sh && Sudo chmod +x script.sh
8
Sham Fiorin

Vous pouvez omettre la commande touchau complet et il n’est pas nécessaire d’utiliser Sudoname__. Pour raccourcir davantage la ligne de commande, vous pouvez utiliser bashHistory Expansion pour enregistrer le nom de fichier une deuxième fois et omettre les espaces inutiles:

echo "echo 'Hello World'" >script.sh&&chmod +x !#:3

History Expansion remplace !#:3 par le quatrième mot de la ligne de commande actuelle, qui dans votre cas est le nom de fichier script.sh. Bien sûr, cela doit être adapté si vous modifiez la première commande, par exemple:

>script.sh echo "echo 'Hello World'"&&chmod +x !#:1

Notez qu'un script valide a besoin d'un Shebang :

>script.sh echo -e "#!/bin/bash\necho 'Hello World'"&&chmod +x !#:1

Si vous avez plus souvent besoin de cette chaîne de commandes, je vous recommande de définir une fonction , il vous suffira de taper le nom de la fonction. L’utilisation d’une variable contenant le nom de fichier:

f=script.sh;>$f echo "echo 'Hello World'"&&chmod +x $f

Si votre nom de fichier contient des caractères spéciaux, n'oubliez pas de citez-les correctement .

18
dessert

La commande install (partie de GNU coreutils avec cp, mv, rm, etc.) peut copier un fichier tout en définissant sa propriété et ses autorisations et en créant les répertoires parent si nécessaire. Par défaut, le nouveau fichier sera exécutable. Il ne comprend pas "-" mais /dev/stdin peut être utilisé à la place:

install /dev/stdin script.sh <<< "echo Hello World"

Ce qui précède utilise un " here string " pour fournir le texte sur stdin, qui est légèrement plus court que le rediriger en. Les arguments de echo n’ont pas besoin de guillemets, à moins qu’ils ne contiennent des caractères ayant une signification spéciale.

20
deltab

Je préfère utiliser cat pour des tâches comme celle-ci:

cat > script.sh && chmod +x script.sh
#!/bin/sh
echo 'Hello World'EnterCtrl+D
8
steeldriver

Vous pouvez également omettre l'intégralité du chmod et utiliser umask avant l'écho. Devrait vous sauver quelques octets. Shebang est facultatif tant que vous utilisez des commandes comprises par tous les Shell (principalement Bourne et C).

1
GrumpyGuru