2013-11-01 5 views
1

Привет У меня есть программа, где, если пользователь вводит имя файла, которое я читаю в файле, я буду запрашивать их для ввода.Чтение нескольких строк пользовательского ввода в оболочке

В настоящее время я делаю:

input=$(cat) 
    echo $input>stdinput.txt 
    file=stdinput.txt 

Проблема с этим он не читает символы новой строки на входе, например, если я вход

s,5,8 
kyle,5,34,2 
j,2 

выход

s,5,8 k,5,34,2 j,2 

Предполагаемый вывод для хранения в файле:

s,5,8 
kyle,5,34,2 
j,2 

Мне нужно знать, как включать символ новой строки во время чтения.?

ответ

4

echo будет подавлять линии перевода. Вам не нужно дополнительное $input переменную как можно непосредственно перенаправить вывод cat «s в файл:

file=stdinput.txt 
cat > "$file" 

Также имеет смысл для меня, чтобы определить $file до cat. Изменили это.


Если вам нужен ввод данных пользователем в обоих файле и $input тогда tee будет достаточно. Если труба выход cat (вход пользователя), чтобы tee вход будет записан как файл и $input:

file=stdinput.txt 
input=$(cat | tee "$file") 
+0

Я пробовал, но когда я катаюсь в файле i.e. cat $ file, он ничего не показывает. –

+0

'cat $ file' работает для меня (значит, содержимое находится в файле). Но с моим предыдущим решением' $ input' было пустым. Изменили это и теперь используйте 'tee' – hek2mgl

+0

. :) – hek2mgl

0

Вы можете использовать такой синтаксис:

#!/bin/sh 

cat > new_file << EOF 
This will be line one 
This will be line two 
This will be line three 
    This will be line four indented 
Notice the absence of spaces on the next line 
EOF 

Здесь cat читают текст до он встречает демиметр (EOF в нашем случае). Строка делиметра может быть любой.

1

Try со ссылкой на переменную, а вторя его:

input=$(cat) 
echo "$input">stdinput.txt 
file=stdinput.txt 

Пример:

$ input=$(cat) 
s,5,8 
kyle,5,34,2 
j,2 
$ echo "$input">stdinput.txt 
$ cat stdinput.txt 
s,5,8 
kyle,5,34,2 
j,2 
$ 

в то время как на самом деле, не цитируя переменную приводит к ситуации, вы описываете

$ echo $input>stdinput.txt 
$ cat stdinput.txt 
s,5,8 kyle,5,34,2 j,2 
$ 
0

Would printf Помогите?

printf "$input">stdinput.txt 
Смежные вопросы