GNU/Linux >> Tutoriales Linux >  >> Linux

Shell Script, lea en la misma línea después de hacer eco de un mensaje

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

¡O! (Más tarde es mejor)

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

El shebang #!/bin/sh significa que está escribiendo código para el shell Bourne histórico (creo que todavía se encuentra en algunos sistemas como Solaris), o más probablemente, el lenguaje de shell estándar definido por POSIX. Esto significa que read -p y echo -n ambos no son confiables.

La solución estándar/portátil es:

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

(El -r impide el tratamiento especial de \ , desde read normalmente lo acepta como una continuación de línea cuando está al final de una línea).

Si sabe que su secuencia de comandos se ejecutará en sistemas que tienen Bash, puede cambiar el shebang a #!/bin/bash (o #!/usr/bin/env bash ) y use todas las características sofisticadas de Bash. (Muchos sistemas tienen /bin/sh vinculado a bash así que funciona de cualquier manera, pero confiar en eso es una mala práctica, y bash en realidad desactiva algunas de sus propias funciones cuando se ejecuta con el nombre sh .)


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

Desde help read :

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

Linux
  1. ¿Qué intérprete de Shell ejecuta un script sin Shebang?

  2. ¿Cómo pasar un argumento de línea de comando a un script de Shell?

  3. Continuaciones de línea Bash después de &&y || ¿Documentado?

  4. ¿Es Shell Portable para ejecutar un comando en la misma línea después de la asignación de variables?

  5. ¿Cómo verificar la subcadena en Shell Script Bash?

Cómo leer archivos línea por línea en Bash

Cómo leer un archivo línea por línea en Bash

Cómo hacer eco de una nueva línea en Bash Shell Scripts

¿Cómo leer argumentos de línea de comando en scripts de Shell?

Cómo incluir un archivo en un script de shell bash

Ejecute el script bash después de iniciar sesión