web-dev-qa-db-fra.com

Exécuter un fichier texte en tant que commande dans Bash

Si j'ai un fichier texte avec une commande séparée sur chaque ligne, comment ferais-je en sorte que le terminal exécute chaque ligne en tant que commande? Je ne veux tout simplement pas avoir à copier et coller une ligne à la fois. Cela ne doit PAS nécessairement être un fichier texte ... Ce peut être n'importe quel type de fichier qui fonctionnera.

example.txt:

Sudo command 1
Sudo command 2
Sudo command 3
44
Blainer

vous pouvez créer un script shell avec ces commandes, puis chmod +x <scriptname.sh>, puis lancez-le simplement

./scriptname.sh

C'est très simple d'écrire un script bash

Fichier de maquette sh:

#!/bin/sh
Sudo command1
Sudo command2 
.
.
.
Sudo commandn
64
Chaos

vous pouvez aussi simplement l'exécuter avec un shell, par exemple:

bash example.txt

sh example.txt
65
kclair

Execute

. example.txt

Cela fait exactement ce que vous demandez, sans définir d’indicateur d’exécutable sur le fichier ni exécuter une instance supplémentaire de bash.

Pour une explication détaillée, voir par exemple https://unix.stackexchange.com/questions/43882/what-is-the-difference-between-sourcing-or-source-and-executing-a-file-i

7
David L.

Vous pouvez utiliser quelque chose comme ceci:

for i in `cat foo.txt`
do
    Sudo $i
done

Bien que si les commandes ont des arguments (c'est-à-dire qu'il y a un espace dans les lignes), vous devrez peut-être vous en servir un peu pour protéger l'espace blanc afin que toute la chaîne soit vue par Sudo comme une commande. Mais cela vous donne une idée sur la façon de commencer.

6
QuantumMechanic