2013-11-01 167 views
1

嗨我有一個程序,如果用戶輸入一個文件名我從文件中讀取,否則我會提示他們輸入。在Shell中讀取多行用戶輸入

目前我做的:

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的直接輸出重定向到文件:

file=stdinput.txt 
cat > "$file" 

而且它更有意義,我到cat之前定義$file。改變了這一點。


如果您需要在文件和$input兩個用戶輸入然後tee就足夠了。如果你管的cat(用戶輸入)輸出到tee輸入將被寫入到兩個文件,並$input

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

我試過了,但是當我捕捉文件,即貓$文件它不顯示任何東西。 –

+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)。 Delimeter字符串可能是任何東西。

1

嘗試引用變量,同時呼應它:

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

printf幫幫我?

printf "$input">stdinput.txt