[bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
-
- Sędziwy Jeż
- Posty: 33
- Rejestracja: 05 lut 2010, 21:39
- Płeć: Mężczyzna
- Wersja Ubuntu: 13.10
- Środowisko graficzne: Unity
- Architektura: x86_64
[bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
Witam,
Tak jak w temacie mam pytanie czy w bash'u istnieje coś takiego jak np w C++ strumień wejścia czyli wprowadzenie wartości tekstowej do programu(w tym przypadku skryptu) oraz jak zamienić ostatnią linię pliku na inną bądź porostu usunąć i dodać na jej miejsce nową.
Z góry dzięki za pomoc, pozdrawiam,
Miziak
Tak jak w temacie mam pytanie czy w bash'u istnieje coś takiego jak np w C++ strumień wejścia czyli wprowadzenie wartości tekstowej do programu(w tym przypadku skryptu) oraz jak zamienić ostatnią linię pliku na inną bądź porostu usunąć i dodać na jej miejsce nową.
Z góry dzięki za pomoc, pozdrawiam,
Miziak
-
- Piegowaty Guziec
- Posty: 26
- Rejestracja: 26 sty 2007, 18:03
- Płeć: Mężczyzna
- Wersja Ubuntu: 16.04
- Środowisko graficzne: Unity
- Architektura: x86_64
Odp: [bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
Chodzi o parametry wywolania?
./skrypt parametr1 parametr2
Jesli tak to:
#!/bin/bash
echo "Nazwa pierwszego argumentu : $1"
echo "Nazwa drugiego argumentu : $2"
echo "Wszystkie argumenty: $*"
echo "$# - tyle argumentow"
./skrypt parametr1 parametr2
Jesli tak to:
#!/bin/bash
echo "Nazwa pierwszego argumentu : $1"
echo "Nazwa drugiego argumentu : $2"
echo "Wszystkie argumenty: $*"
echo "$# - tyle argumentow"
- beluosus
- Zakręcona Traszka
- Posty: 695
- Rejestracja: 01 paź 2006, 15:32
- Płeć: Mężczyzna
- Wersja Ubuntu: inny OS
- Środowisko graficzne: Xfce
- Architektura: x86
- Kontakt:
Odp: [bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
Strumień != argument
Poniższy kod tworzy plik temp, przepisuje do niego dane ze standardowego wejścia i zamienia ostatnią linię.
Przykład użycia:
Poniższy kod tworzy plik temp, przepisuje do niego dane ze standardowego wejścia i zamienia ostatnią linię.
Kod: Zaznacz cały
#!/bin/bash
rm temp
while read line
do
echo "$line" >> temp
done
sed -i '$d' temp
echo "ostatnia linia" >> temp
Kod: Zaznacz cały
./test.sh < jakis.txt
-
- Sędziwy Jeż
- Posty: 33
- Rejestracja: 05 lut 2010, 21:39
- Płeć: Mężczyzna
- Wersja Ubuntu: 13.10
- Środowisko graficzne: Unity
- Architektura: x86_64
Odp: [bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
Okej, bo konkretnie chcę sobie napisać skrypcik do zmiany tapety we fluxbox'e bo sama ta zmiana jest uciążliwa bo po numero uno trzeba wklepać komendę do terminala potem z edytować plik który wywoła tapetę przy włączeniu flux'a a skrypcik by mi to ułatwił teraz na co mi strumień a no na to żeby wprowadzić do skryptu ścieżkę do tapety potem polecenie:
ustawi tapetę a następnie z pliczku usunie ostatnią linijkę i wstawi nową z podstawioną nową ścieżką tapety.
Zrobiłem taki prototyp ale nie działa ;/
Bardzo proszę o pomoc
Kod: Zaznacz cały
fbsetbg -f + wprowadzona ścieżka
Zrobiłem taki prototyp ale nie działa ;/
Kod: Zaznacz cały
#!/bin/bash
echo Podaj lokalizację tapety:
read SCIERZKA
fbsetbg -f $SCIERZKA
- beluosus
- Zakręcona Traszka
- Posty: 695
- Rejestracja: 01 paź 2006, 15:32
- Płeć: Mężczyzna
- Wersja Ubuntu: inny OS
- Środowisko graficzne: Xfce
- Architektura: x86
- Kontakt:
Odp: [bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
To pewnie dlatego, że scieRZka pisze się przez Ż z kropką... Jeśli w nazwie są spacje to musisz zmienną dać w cudzysłów ("$...").
Powyższy sposób z readem jednak głupi jest (myślałem, że są Ci potrzebny konkretnie strumień, a nie owijanie w bawełnę). Zamiast while lepiej zrobić np:
Na jedno wyjdzie tylko szybciej i nie utnie spacji.
Powyższy sposób z readem jednak głupi jest (myślałem, że są Ci potrzebny konkretnie strumień, a nie owijanie w bawełnę). Zamiast while lepiej zrobić np:
Kod: Zaznacz cały
cp jakis.txt temp
-
- Sędziwy Jeż
- Posty: 33
- Rejestracja: 05 lut 2010, 21:39
- Płeć: Mężczyzna
- Wersja Ubuntu: 13.10
- Środowisko graficzne: Unity
- Architektura: x86_64
Odp: [bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
OKej ale to nadal nie rozwiązuje ani nie zmniejsza mego problemu ;/
- sulti
- Serdeczny Borsuk
- Posty: 139
- Rejestracja: 17 wrz 2007, 15:31
- Płeć: Mężczyzna
- Wersja Ubuntu: 12.10
- Środowisko graficzne: Unity
- Architektura: x86
Odp: [bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
Pokaż jeszcze tą końcówkę pliku w którym chcesz zamieniać ostatnią linię, oraz podaj przykładową linię którą chcesz tam umieścić.
Dodaj też wywołanie komendy fbsetbg z linii poleceń, która na prawdę działa. Ubierze się to wszystko w skrypt.
Dodaj też wywołanie komendy fbsetbg z linii poleceń, która na prawdę działa. Ubierze się to wszystko w skrypt.
You tried, and you failed, so the lesson is, never try.
-
- Sędziwy Jeż
- Posty: 33
- Rejestracja: 05 lut 2010, 21:39
- Płeć: Mężczyzna
- Wersja Ubuntu: 13.10
- Środowisko graficzne: Unity
- Architektura: x86_64
Odp: [bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
@up
Okej więc tak:
Opis:
Konkretnie potrzebny mi skrypt który po wywołaniu u mnie z menu flux'a otworzy mi terminal i wypisze - "Podaj ścieżkę do tapety:" po czym podaję /to/jest/sciezka/do/tapety.jpg wtedy skrypt miałby ustawić tapetę za pomocą polecenia:
Okej skryptu ustawił mi tapetkę jest pół biedy teraz flux ma ją ustawiać przy każdym włączeniu komputera za to opowiada plik o ścieżce:
gdzie init to plik konfiguracyjny nie katalog!
w nim na samym końcu jest taka linijka:
i trzeba ją zastąpić identyczną ale z zaktualizowaną ścieżką i to tyle terminal sie wyłącza i koniec działania skryptu.
Proszę bardzo o pomoc i pozdrawiam...
Okej więc tak:
Opis:
Konkretnie potrzebny mi skrypt który po wywołaniu u mnie z menu flux'a otworzy mi terminal i wypisze - "Podaj ścieżkę do tapety:" po czym podaję /to/jest/sciezka/do/tapety.jpg wtedy skrypt miałby ustawić tapetę za pomocą polecenia:
Kod: Zaznacz cały
fbsetbg -f /tutaj/wprowadzona/sciezka/do/tapety.jpg
Kod: Zaznacz cały
~/.fluxbox/init
w nim na samym końcu jest taka linijka:
Kod: Zaznacz cały
session.screen0.rootCommand: fbsetbg -f /tutaj/wprowadzona/sciezka/do/tapety.jpg
Proszę bardzo o pomoc i pozdrawiam...
- sulti
- Serdeczny Borsuk
- Posty: 139
- Rejestracja: 17 wrz 2007, 15:31
- Płeć: Mężczyzna
- Wersja Ubuntu: 12.10
- Środowisko graficzne: Unity
- Architektura: x86
Odp: [bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
Spróbuj coś takiego:
Kod: Zaznacz cały
#!/bin/bash
if [ ! $# -eq 1 ]; then
echo "Usage: $0 /path/to/wallpaper.jpg"
exit 1
fi
if [ ! -e $1 ]; then
echo "$1 is not a file."
exit 1
else
echo "Setting wallpaper to $1."
fbsetbg -f $1
fi
if [ ! -e "~/.fluxbox/init" ]; then
echo "Couldn't find fluxbox config file."
exit 1
else
echo "Saving settings to config file."
sed -i "s,\(session.screen0.rootCommand.*fbsetbg -f \).*,\1$1," ~/.fluxbox/init
fi
exit 0
You tried, and you failed, so the lesson is, never try.
-
- Sędziwy Jeż
- Posty: 33
- Rejestracja: 05 lut 2010, 21:39
- Płeć: Mężczyzna
- Wersja Ubuntu: 13.10
- Środowisko graficzne: Unity
- Architektura: x86_64
Odp: [bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
Powiedz mi jeszcze jak do tego wyrażenia wprowadzić ścieżkę:
aby dopisywało coś w ten deseń:
ale podanej w parametrze a nie tak na sztywno
Kod: Zaznacz cały
sed -i "s,\(session.screen0.rootCommand.*fbsetbg -f \).*,\1$1," ~/.fluxbox/init
Kod: Zaznacz cały
session.screen0.rootCommand: fbsetbg -f /sciezka/do/tapety.jpg
- sulti
- Serdeczny Borsuk
- Posty: 139
- Rejestracja: 17 wrz 2007, 15:31
- Płeć: Mężczyzna
- Wersja Ubuntu: 12.10
- Środowisko graficzne: Unity
- Architektura: x86
Odp: [bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
Już jest - $1. Ten sed zamienia ciąg session.screen0...... na odpowiedni razem ze ścieżką podaną jako parametr, właśnie ten $1.
Skrypt jest zrobiony tak że powinien działać... Sprawdź
edit:
w całym skrypcie $1 jest parametrem w postaci "/sciezka/do/pliku"
Skrypt jest zrobiony tak że powinien działać... Sprawdź
edit:
w całym skrypcie $1 jest parametrem w postaci "/sciezka/do/pliku"
You tried, and you failed, so the lesson is, never try.
-
- Sędziwy Jeż
- Posty: 33
- Rejestracja: 05 lut 2010, 21:39
- Płeć: Mężczyzna
- Wersja Ubuntu: 13.10
- Środowisko graficzne: Unity
- Architektura: x86_64
Odp: [bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
A no racja ale teraz przyrzekam ostatnie pytanie jak zrobić aby skrypt otworzył nowy terminal i w nim dopiero się wykonał??
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 51 gości