Как записать пользовательский ввод в файл в сценарии оболочки?
Мой друг показывал мне программу в скрипте, где он делал, где он должен был открыть программу, он задавал вопрос, он набирал ответ. Затем он закроется, но все, что он напечатал как ответ, будет перенесено в текстовый документ.
3 ответа
Я бы предложил начать с чего-то вроде
#!/bin/bash
read -p "Your question here: "
echo "$REPLY" > somefile
Вы можете прочитать больше о Bash's read
Команда либо со страницы руководства (man bash
) или набрав help read
в командной строке.
Если ответ не нуждается в проверке, достаточно сделать это в одну строку:
$ echo "Enter blah" && cat > output.txt
Enter blah
blah
# Press Ctrl+D to stop recording stuff into file
$ cat output.txt
blah
Что происходит здесь, мы используем echo
выводить текст на экран. &&
просто является логическим оператором и означает "если предыдущая команда была успешной, выполнить вторую". &&
здесь не важно, а ;
может быть использован так же хорошо. cat > output.txt
это забавная часть - без указания файла, кошка будет читать stdin
поток по умолчанию (который в этом случае является вашей клавиатурой) и попугай его stdout
, Какие >
делает это отправить stdout
поток в файл. Итак, в основном, мы переписали потоки данных, чтобы перейти от клавиатуры к файлу, а не с клавиатуры на экран терминала, всего за несколько символов текста.
Это не обязательно делать в одной только оболочке, это можно сделать с помощью других инструментов, таких как python
:
$ python -c 'import sys;print("Say hello");f=open("output.txt","w");[f.write(l) for l in sys.stdin.readlines()];f.close()'
Say hello
Hello AskUbuntu
# press Ctrl+D
$ cat output.txt
Hello AskUbuntu
#/bin/bash
#Here you can ask your question just edit "Your Question".
echo "Your Question"
#"read" this command reads input from user and store in text what ever
#like word "answer" used here as example.
read answer
#"$answer" this input was taken by user from "read" and stored in word answer . echo prints all words stored in $answer to file like anything.txt or any extention you can use.
echo $answer > any_file.txt