GNU/Linux >> Linux Esercitazione >  >> Linux

Shell Script, letto sulla stessa riga dopo aver ripetuto un messaggio

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

O! (Dopo è meglio)

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

Lo shebang #!/bin/sh significa che stai scrivendo codice per la shell Bourne storica (che si trova ancora su alcuni sistemi come Solaris, credo) o, più probabilmente, per il linguaggio shell standard come definito da POSIX. Ciò significa che read -p e echo -n sono entrambi inaffidabili.

La soluzione standard/portatile è:

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

(Il -r impedisce il trattamento speciale di \ , dal read normalmente lo accetta come una continuazione di riga quando si trova alla fine di una riga.)

Se sai che il tuo script verrà eseguito su sistemi che hanno Bash, puoi cambiare shebang in #!/bin/bash (o #!/usr/bin/env bash ) e utilizzare tutte le fantasiose funzionalità di Bash. (Molti sistemi hanno /bin/sh collegato simbolicamente a bash quindi funziona in entrambi i modi, ma fare affidamento su questo è una cattiva pratica e bash in realtà disabilita alcune delle sue funzionalità quando viene eseguito con il nome sh .)


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

Da help read :

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

Linux
  1. Quale interprete di shell esegue uno script senza Shebang?

  2. Passare gli argomenti della riga di comando allo script Bash?

  3. È Shell Portable eseguire un comando sulla stessa riga dopo l'assegnazione di variabili?

  4. Come controllare la sottostringa in Shell Script Bash?

  5. Script Bash - Come leggere l'input dell'utente

Come leggere i file riga per riga in Bash

Come leggere un file riga per riga in Bash

Come fare eco a una nuova riga negli script di Bash Shell

Come leggere gli argomenti della riga di comando negli script della shell?

Esegui lo script bash dopo il login

Uccidi il programma dopo aver emesso una determinata riga, da uno script di shell