2013-04-01 12 views
11

Ho problemi nell'esecuzione di uno script semplice in bash. Lo script è come questo:comando di lettura non attende input

#! /bin/sh 

read -p 'press [ENTER] to continue deleting line' 
sudo sed -ie '$d' /home/hpccuser/.profile 

e quando eseguo lo script con ./script l'uscita è come questo:

press [ENTER] to continue deleting line./script: 3: read: arg count 
[sudo] password for user 

ho eseguito il comando di lettura direttamente nel terminale (copia e incolla dallo script al terminale) e funziona bene; aspetta che venga premuto un INVIO (proprio come una pausa).

risposta

14

Perché lo script inizia con #!/bin/sh piuttosto che #!/bin/bash, non sono garantiti per avere estensioni bash (come read -p) disponibili, e può contare solo sulle funzionalità conforme agli standard.

Vedi the relevant standards document per un elenco di funzionalità garantite di essere presenti in read.

In questo caso, che vorreste probabilmente due linee, quello che fa la stampa, e l'altro facendo la lettura:

printf 'press [ENTER] to continue deleting...' 
read _ 
+0

ho controllato e il mio $ SHELL ero bash. così/bin/sh lancerebbe bash. ho sbagliato? –

+1

@mohammadhmontazeri '/ bin/sh' lancia qualunque shell sia, beh,'/bin/sh' - NON il tuo '$ SHELL'. Inoltre, iniziando bash come '/ bin/sh' (nel caso in cui'/bin/sh' sia un link simbolico a 'bash') disabilita una grande quantità di funzionalità. –

+1

@mohammadhmontazeri Vedi http://mywiki.wooledge.org/BashGuide/Practices#Choose_Your_Shell per ulteriori informazioni. –

0

Si può fare questo con il comando echo troppo !:

echo "press [ENTER] to continue deleting line" 
    read continue 
+0

Questo non risolve il problema se la tua shell è 'sh' perché ad es. Dash non ti permette di chiamare 'read' senza il nome di una variabile. – tripleee

+0

Con 'echo' (a meno che tu non ne abbia uno che supporti' -n', che non è necessario implementare una feature shell opzionale), ottieni una newline in più in questo modo che non è presente con l'originale 'read -p 'codice. –

-1
read -p " Ici mon texte " continue 

funziona su raspbian

+0

Completamente inutile. – Dagrooms

Problemi correlati