GNU/Linux >> Tutoriels Linux >  >> Linux

en utilisant Linux, comment puis-je passer le contenu d'un fichier en tant que paramètre à un exécutable ?

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

  1. $(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.

  2. 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) .

  3. 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)

Linux
  1. Comment utiliser la commande Tar sous Linux

  2. Comment extraire le fichier tar.gz sous Linux à l'aide de la ligne de commande

  3. Comment passer le contenu d'un fichier en tant que paramètre de ligne de commande ?

  4. Comment puis-je randomiser les lignes d'un fichier à l'aide d'outils standard sur Red Hat Linux ?

  5. Linux + comment ne donner qu'à un utilisateur spécifique pour lire le fichier

Comment étendre l'espace d'échange à l'aide du fichier d'échange sous Linux

Comment rendre un fichier exécutable sous Linux

Comment surveiller les modifications de fichiers à l'aide de fswatch sous Linux

Comment lister le contenu d'un paquet sous Linux

Comment afficher le contenu d'une archive ou d'un fichier compressé sous Linux

Comment effacer en toute sécurité un disque et un fichier à l'aide de la commande Linux shred