Chcę wstawić do skryptu wartość (ciąg), którą odczytałbym z pliku tekstowego.
Na przykład zamiast:
echo "Enter your name"
read name
Chcę odczytać ciąg z innego pliku tekstowego, aby tłumacz mógł odczytać ciąg z pliku, a nie z danych wejściowych użytkownika.
KEY=VALUE
parami? Rozwiązania są zupełnie inne (jeśli jest to drugie, zastosowanie ma odpowiedź Takkata, poprzednie Radu)Odpowiedzi:
Aby odczytać zmienne z pliku, możemy użyć polecenia
source
lub.
.Załóżmy, że plik zawiera następujący wiersz
możemy następnie zaimportować tę zmienną za pomocą
źródło
<filename>
środku, zostanie uruchomione w twojej powłoce, na przykładrm -rf /
, co może być bardzo niebezpieczne.sed
aby dodaćlocal
słowo kluczowe i uczynić skrypt nieco bezpieczniejszym i nie zanieczyszczać globalnego zasięgu. Więc wewnątrz funkcji wykonaj,cat global_variables.sh | sed -e 's/^/local /' > local_variables.sh
a następnie użyj. ./local_variables.sh
. Cokolwiek zaimportujesz do funkcji, będzie dostępne tylko w tej funkcji. Zauważ, że zakłada, żeglobal_variables.sh
zawiera tylko jedną zmienną na linię.Biorąc pod uwagę, że chcesz zachować całą zawartość pliku tekstowego w zmiennej, możesz użyć:
Lub w czystej bash:
źródło
echo $name
. Używam tego tylko do testu. Następnie możesz użyć$name
zmiennej do dalszego przetwarzania w dowolnym miejscu skryptu.$name
zmiennej jest łańcuch z pliku przypisany za pomocącat $file
polecenia. Co nie jest jasne lub tak trudne do zrozumienia?$file
zmiennej jest zbędne, jeśli używasz jej tylko raz, aby załadować$name
zmienną, po prostu użyjcat /path/to/file
Z poziomu skryptu możesz to zrobić:
Możesz to zrobić nawet wiele razy, np. W pętli
źródło
Jednym z alternatywnych sposobów jest po prostu przekierowanie standardowego wejścia do pliku, w którym masz wszystkie dane wprowadzone przez użytkownika w kolejności, jakiej oczekuje program. Na przykład za pomocą programu (wywoływanego
script.sh
)i plik wejściowy (nazywany
input.in
)możesz uruchomić to z terminala na jeden z dwóch poniższych sposobów:
i byłoby to równoznaczne z uruchomieniem skryptu i ręcznym wprowadzeniem danych - wypisałby wiersz „Witaj Tomas. Masz 26 lat, prawda?”.
Jak Radu Rădeanu został już zasugerował , można użyć
cat
wewnątrz skryptu do odczytania zawartości pliku w aVariable - w tym przypadku, trzeba każdy plik zawiera tylko jeden wiersz, tylko wartości, które chcesz dla tej konkretnej zmiennej. W powyższym przykładzie, można podzielić plik wejściowy do jednej z nazwą (powiedzmyname.in
) i jednym z wiekiem (powiedzmyage.in
) i zmienićread name
iread age
liniename=$(cat name.in)
iage=$(cat age.in)
odpowiednio.źródło
vh=$(awk "NR==3 {print;exit}" /var/www/test.txt)
. Będziesz wtedy zapisywać ciąg znaków w zmiennej$vh
, dzięki czemu będziesz mógł go używać w następujący sposób:mkdir "/var/www/$vh"
- utworzy to folder o określonej nazwie wewnątrz / var / www.Znalazłem działające rozwiązanie tutaj: https://af-design.com/2009/07/07/loading-data-into-bash-variables/
źródło
Z
man bash:1785
tego podstawienie polecenia jest równoważne,name=$(cat "$file")
ale szybsze.źródło
Krótka odpowiedź:
źródło
Jeśli chcesz użyć wielu ciągów, możesz użyć:
LUB
Jeśli chcesz, aby użytkownik wskazał plik
źródło
źródło
Używam tego, aby uzyskać pojedynczą zmienną z pliku
Gdy
GET_VAR
nie zostanie znaleziony${FILE}
, będzie pusty, zamiast powodować błąd dzięki|| true
.Używa,
grep -P
który jest w GNU grep, ale nie jest domyślny we wszystkich grep w momencie pisania tego.źródło