GNU/Linux >> Tutoriels Linux >  >> Linux

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

echo -n "Enter [y/n] : " ; read opt

OU! (Plus tard c'est mieux)

read -p "[y/n]: " opt

Le shebang #!/bin/sh signifie que vous écrivez du code soit pour le shell Bourne historique (toujours présent sur certains systèmes comme Solaris, je pense), soit plus probablement pour le langage shell standard tel que défini par POSIX. Cela signifie que read -p et echo -n sont tous deux peu fiables.

La solution standard/portable est :

printf 'Enter [y/n] : '
read -r opt

(Le -r empêche le traitement spécial de \ , depuis read accepte normalement cela comme une continuation de ligne quand c'est à la fin d'une ligne.)

Si vous savez que votre script sera exécuté sur des systèmes dotés de Bash, vous pouvez changer le shebang en #!/bin/bash (ou #!/usr/bin/env bash ) et utilisez toutes les fonctionnalités sophistiquées de Bash. (De nombreux systèmes ont /bin/sh lié symboliquement à bash donc ça marche dans les deux sens, mais s'y fier est une mauvaise pratique, et bash désactive en fait certaines de ses propres fonctionnalités lorsqu'il est exécuté sous le nom sh .)


Solution :read -p "Enter [y/n] : " opt

À partir de help read :

  -p prompt output the string PROMPT without a trailing newline before
        attempting to read

Linux
  1. Quel interpréteur Shell exécute un script sans Shebang ?

  2. Continuation de la ligne bash après &&et || Documenté?

  3. Passer les arguments de la ligne de commande au script Bash ?

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

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

Comment lire des fichiers ligne par ligne dans Bash

Comment lire un fichier ligne par ligne dans Bash

Comment lire les arguments de ligne de commande dans les scripts shell ?

Comment inclure un fichier dans un script shell bash

Exécuter le script bash après la connexion

Tuer le programme après avoir sorti une ligne donnée, à partir d'un script shell