Googlowałem to pytanie bezskutecznie. Automatyzuję proces kompilacji tutaj w pracy i wszystko, co próbuję zrobić, to uzyskać numery wersji i krótki opis kompilacji, który może być wieloliniowy. System, na którym działa, to OSX 10.6.8.
Widziałem wszystko, od używania CAT do przetwarzania każdej linii w razie potrzeby. Nie wiem, czego powinienem użyć i dlaczego.
Próbowanie
read -d '' versionNotes
Powoduje zniekształcone wprowadzanie danych, jeśli użytkownik musi użyć klawisza Backspace. Nie ma też dobrego sposobu na zakończenie wprowadzania, ponieważ ^ D się nie kończy, a ^ C po prostu kończy proces.
read -d 'END' versionNotes
Działa ... ale nadal zniekształca dane wejściowe, jeśli potrzebny jest klawisz Backspace.
while read versionNotes
do
echo " $versionNotes" >> "source/application.yml"
done
Nie kończy poprawnie danych wejściowych (ponieważ jestem za późno, aby wyszukać dopasowanie do pustego łańcucha).
Odpowiedzi:
man bash
wspomina «…… »
i zgadzam się, że warto o tym wspomnieć -
echo "$myVar"
wyświetlałby dane wejściowe tak, jak zostały podane.źródło
man stty
, dowiedz się, jak uzyskać aktualne ustawieniaSpróbuj tego:
Bez podziałów linii:
Z podziałami linii:
źródło
-d ''
jest dokładnie tym, czego potrzebowałem. DziękiZapoznaj się z doskonałym przewodnikiem po Bash, aby poznać wszystkie potrzeby związane ze skryptami bash.
W szczególności FAQ Bash zawiera to pod numerem 1:
Jak mogę odczytać plik (strumień danych, zmienna) wiersz po wierszu (i / lub pole po polu)?
źródło
read -r
, ale jak mogę to zrobić ze STDIN? Próbowałem użyćread -r
wcześnie.Rozwiązałem ten problem, radząc sobie z każdą linią, dopóki nie znalazłem pustej linii. Działa wystarczająco dobrze w mojej sytuacji. Ale jeśli ktoś chce dodać lepsze rozwiązanie, możesz to zrobić.
źródło
read -r
zamiast tego.Możesz uruchomić edytor, taki jak vim, pico ...
źródło
Najpierw kilka poprawek:
-e
która korzysta z readline (abyś miał historię bash i wszystkie funkcje edycji)-d
bierze tylko jedną postać. Np. Z „END” pobiera „E” i ilekroć użytkownik pisze „E”, czytanie zatrzymuje się (myślę, że nie tego chcesz ...)Można to zrobić na kilka sposobów. Chciałbym czytać wiersz po wierszu i zatrzymywać się po znalezieniu pustej linii (chociaż możesz ustawić dowolne słowo zatrzymania):
źródło
Masz kilka metod.
Jedną z najprostszych metod jest:
Na przykład:
źródło
ls
!Używamy konstruktów używających xargs i ctrl-d do łamania. Nie jestem z tego w pełni usatysfakcjonowany, ale z pewnością wykonuje zadanie polegające na pobieraniu danych wejściowych od wielu wierszy i umieszczaniu ich w zmiennej (formatowanie nienaruszone). (Pierwsze i trzecie zadanie dodają cudzysłowy wokół zawartości wejścia xargs).
Używamy reminderBody jako tematu wiadomości e-mail wysyłanej pocztą (za pośrednictwem bash).
źródło
Zobacz: http://tldp.org/LDP/abs/html/internal.html#READR
Użyj
read
i zwróć uwagę, że jeśli zakończysz linię z nową linią,\
zostanie zignorowana. Więc możesz zrobić:źródło