2013-04-01 4 views
11

У меня проблема с выполнением простого скрипта в bash. Сценарий таков:команда чтения не ждет ввода

#! /bin/sh 

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

и когда я выполнить сценарий с ./script вывод таков:

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

я запускаю команду чтения непосредственно в терминале (копирование и вставка из сценария к терминалу), и он работает нормально; он ждет нажатия ENTER (как пауза).

ответ

14

Поскольку ваш сценарий начинается с #!/bin/sh, а не #!/bin/bash, вы не гарантированы иметь расширения Баша (например read -p) доступны, и можете рассчитывать только на функциональности соответствующих стандартов.

См. the relevant standards document для получения списка функциональности, гарантированного присутствием в read.

В этом случае, вы, вероятно, хотите две линии, одна делает печать, а другой делает чтение:

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

Я проверил и мой $ SHELL был bash. так что/bin/sh запускает bash. Я ошибаюсь? –

+1

@mohammadhmontazeri '/ bin/sh' запускает любую оболочку, ну,'/bin/sh' - НЕ ваш '' SHELL''. Более того, запуск bash как '/ bin/sh' (в случае, когда'/bin/sh' является символической ссылкой на 'bash'), отключает большую функциональность. –

+1

@mohammadhmontazeri См. Http://mywiki.wooledge.org/BashGuide/Practices#Choose_Your_Shell для получения дополнительной информации. –

0

Вы можете сделать это с помощью эхо-команды тоже !:

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

Это действительно не решает проблему, если ваша оболочка 'sh', например, например. Dash не позволяет вызывать 'read' без имени переменной. – tripleee

+0

С 'echo' (если у вас нет функции поддержки' -n', которая является необязательной оболочкой, для которой не требуются оболочки), вы получаете дополнительную строку новой строки таким образом, которой нет с исходным 'read -p 'код. –

-1
read -p " Ici mon texte " continue 

он работает на raspbian

+0

Совершенно бесполезно. – Dagrooms

Смежные вопросы