Cela devrait faire l'affaire :
./program `cat file`
Si vous voulez tout le contenu du fichier dans un seul argument, ajoutez des guillemets doubles (testé en bash. Je pense que cela peut varier d'un shell à l'autre) :
./program "`cat file`"
Commande
./program "$(< file)"
Explication
-
$(cmd)
exécute une commande et convertit sa sortie en une chaîne.$(cmd)
peut également être écrit avec des backticks comme`cmd`
. Je préfère le nouveau$(cmd)
car il niche mieux que les backticks de la vieille école. -
La commande que nous voulons est
cat file
. Et puis depuis la page de manuel de bash :La substitution de commande
$(cat file)
peut être remplacé par l'équivalent mais plus rapide$(< file)
. -
Les guillemets qui l'entourent garantissent que les espaces blancs sont préservés, juste au cas où vous auriez des espaces ou des retours à la ligne dans votre fichier. Citant correctement les choses dans les scripts shell est une compétence qui fait cruellement défaut. Citant des variables et des substitutions de commandes est une bonne habitude à adopter afin de ne pas être un peu plus tard lorsque vos noms de fichiers ou valeurs de variables contiennent des espaces ou des caractères de contrôle ou d'autres bizarreries.
Vous pouvez utiliser l'un des éléments suivants :
./program $(cat file)
./program "$(cat file)"
Ce dernier est utile s'il peut y avoir plusieurs mots dans le fichier et que vous souhaitez qu'ils soient traités comme un seul argument. Dans tous les cas, je préfère l'utilisation de if $()
aux backticks simplement en raison de sa capacité à s'imbriquer (ce qui n'est probablement pas une exigence dans ce cas).
Gardez également à l'esprit que cette réponse (et d'autres) est davantage liée au shell utilisé qu'à Linux lui-même. Depuis le prédominant
le shell semble être bash
, j'ai codé spécifiquement pour ça.
C'est en fait une manière assez courante de tuer des processus sous des sosies UNIX. Un démon (comme cron
) écrira son ID de processus dans un fichier (comme /var/cron.pid
) et vous pouvez le signaler avec quelque chose comme :
kill -HUP $(cat /var/cron.pid)