2013-01-02 14 views
12

Jestem bardzo nowy w tworzeniu skryptów bash, ale moim celem jest pobranie pliku .txt i przypisanie ciągu słów do txt plik do zmiennej. Próbowałem tego (nie ma pojęcia, czy jestem na dobrej drodze, czy nie).Potrzebuję przypisać zawartość pliku tekstowego do zmiennej w skrypcie bash

#!/bin/bash 
FILE="answer.txt" 
file1="cat answer.txt" 
print $file1 

Kiedy uruchamiam to mam

Warning: unknown mime-type for "cat" -- using "application/octet-stream" 
Error: no such file "cat" 
Error: no "print" mailcap rules found for type "text/plain" 

Co mogę zrobić, aby to działało?

Edit ** Kiedy go zmienić na:

#!/bin/bash 
    FILE="answer.txt" 
    file1=$(cat answer.txt) 
    print $file1 

uzyskać to zamiast:

Warning: unknown mime-type for "This" -- using "application/octet-stream" 
Warning: unknown mime-type for "text" -- using "application/octet-stream" 
Warning: unknown mime-type for "string" -- using "application/octet-stream" 
Warning: unknown mime-type for "should" -- using "application/octet-stream" 
Warning: unknown mime-type for "be" -- using "application/octet-stream" 
Warning: unknown mime-type for "a" -- using "application/octet-stream" 
Warning: unknown mime-type for "varible." -- using "application/octet-stream" 
Error: no such file "This" 
Error: no such file "text" 
Error: no such file "string" 
Error: no such file "should" 
Error: no such file "be" 
Error: no such file "a" 
Error: no such file "varible." 

Kiedy wchodzę kota Answer.txt to wypisuje ten łańcuch tekstowy powinien być varible tak jak powinno, ale nadal nie mogę tego zrobić za pomocą tej zmiennej.

+0

'file_contents = $ (cat Answer.txt)'? –

+0

@WaleedKhan Próbowałem tego i teraz otrzymuję powyższe błędy – BluGeni

+3

Jak już powiedziałem w mojej odpowiedzi używasz print zamiast echa. Poza tym prawdopodobnie nie potrzebujesz 'FILE =" answer.txt ", którego nie używasz nigdzie. –

Odpowiedz

17

Potrzebne są odwrócone, pojedyncze apostrofy przechwycić wyjście z polecenia (i prawdopodobnie chcesz echo zamiast print):

file1=`cat answer.txt` 
echo $file1 
+0

Dzięki za znalezienie obu błędów dla początkujących! – BluGeni

11

Budowa $() zwraca stdout z polecenia.

file_contents=$(cat answer.txt) 
+1

+1; bardziej szczegółowo nazywa się to substytucją poleceń: http://tldp.org/LDP/abs/html/commandsub.html –

+3

To nie jest ściśle rzecz biorąc prawdziwe. Wynikiem tego polecenia jest 0 (które jest przechowywane w $?), ** wyjście ** tego polecenia jest zawartością pliku. –

+1

Próbowałem tego i teraz otrzymuję powyższe błędy – BluGeni

22

W bash $(< answer.txt) jest wbudowane skrótem $(cat answer.txt)

Podejrzewam używasz tego print:

NAME 
    run-mailcap, see, edit, compose, print − execute programs via entries in the mailcap file 
+2

To naprawdę nie jest stenografia. Jest to, zgodnie z instrukcją odniesienia bash _ równoważne przez faster_. Jest to zdecydowanie odpowiedź na PO. (Powinien być zaakceptowany). Powinieneś także wspomnieć, jak wydrukować rozszerzenie '$ file1':' echo "$ file1" '. –

+0

Przyjemny haczyk, że komunikat o błędzie naprawdę oznaczał, że wpisał "print" zamiast "printf", co przywiodło mnie tutaj. –

Powiązane problemy