GNU/Linux >> Tutoriels Linux >  >> Linux

Est-ce Shell Portable pour exécuter une commande sur la même ligne après l'affectation de variables ?

Existe-t-il une norme couvrant la portabilité de l'exécution d'une commande après l'affectation d'une variable sur la même ligne ?

APPLE="cider" echo hi

Comment portable est quelque chose comme ça? Où cela fonctionnera-t-il et où ne fonctionnera-t-il pas ?

Aussi :mes scripts shell commencent par # !/bin/sh si cela fait une différence.

Réponse acceptée :

Tant que vous utilisez un shell compatible POSIX, oui.

D'après la définition POSIX du langage de commande shell :(points pertinents en gras)

Une "commande simple" est une séquence d'affectations de variables facultatives et des redirections, dans n'importe quel ordre, éventuellement suivies de mots et de redirections, terminées par un opérateur de contrôle.

Lorsqu'une commande simple donnée doit être exécutée (c'est-à-dire lorsqu'une construction conditionnelle telle qu'une liste AND-OR ou une instruction case n'a pas contourné la commande simple), les développements, affectations et redirections suivants doivent tous être effectués à partir de du début du texte de la commande à la fin :

  1. Les mots reconnus comme des affectations variables ou les redirections selon les règles de grammaire du shell sont enregistrées pour être traitées aux étapes 3 et 4.

  2. Les mots qui ne sont pas des affectations ou des renvois de variables doivent être développés. S'il reste des champs après leur expansion, le premier champ doit être considéré comme le nom de la commande et les champs restants sont les arguments de la commande.

  3. Les redirections doivent être effectuées comme décrit dans Redirection.

  4. Chaque affectation de variable doit être étendue pour l'expansion du tilde, l'expansion des paramètres, la substitution de commande, l'expansion arithmétique et la suppression des guillemets avant d'attribuer la valeur.

Dans la liste précédente, l'ordre des étapes 3 et 4 peut être inversé pour le traitement d'utilitaires intégrés spéciaux; voir Utilitaires intégrés spéciaux.

Si aucun nom de commande n'en résulte, les affectations de variables doivent affecter l'environnement d'exécution actuel. Sinon, les affectations de variables seront exportées pour l'environnement d'exécution de la commande et n'affecteront pas l'environnement d'exécution actuel (sauf pour les éléments intégrés spéciaux).

Aussi, oui #!/bin/sh questions. À partir de la définition POSIX de sh :

L'utilitaire sh est un interpréteur de langage de commande qui doit exécuter des commandes lues à partir d'une chaîne de ligne de commande, de l'entrée standard ou d'un fichier spécifié. L'application doit s'assurer que les commandes à exécuter sont exprimées dans le langage décrit dans Shell Command Language .

Donc, en gros, il dit que sh doit suivre les règles que nous avons couvertes ci-dessus.

En relation:Ce composant de coque noire de jonction de câble appelé?

Donc, tant que vous êtes sur un système d'exploitation compatible POSIX, tout va bien.


Linux
  1. Exécutez une commande Sudo en spécifiant le mot de passe sur la même ligne ?

  2. Texte en écho après la commande Curl sur la même ligne ?

  3. Comment installer un script pour qu'il s'exécute n'importe où à partir de la ligne de commande ?

  4. Shell Script, lu sur la même ligne après avoir renvoyé un message

  5. Exécutez un script shell à partir de la commande docker-compose, à l'intérieur du conteneur

Exécutez la ligne de commande Linux sur votre iPad

Maîtrisez la ligne de commande Linux

Googler - Exécutez des recherches Google à partir de la ligne de commande

Comment stocker le résultat d'une commande shell exécutée dans une variable en python ?

Comment conserver les sauts de ligne lors du stockage de la sortie de la commande dans une variable ?

Ligne de commande pour revenir à l'interface graphique après Ctrl-Alt-F1 ?