Strona 1 z 1
[bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
: 23 mar 2010, 21:12
autor: Miziak
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
Odp: [bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
: 23 mar 2010, 23:20
autor: Kuriozalny
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"
Odp: [bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
: 24 mar 2010, 06:42
autor: beluosus
Strumień != argument
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
Przykład użycia:
Odp: [bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
: 24 mar 2010, 17:51
autor: Miziak
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 ;/
Kod: Zaznacz cały
#!/bin/bash
echo Podaj lokalizację tapety:
read SCIERZKA
fbsetbg -f $SCIERZKA
Bardzo proszę o pomoc

Odp: [bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
: 24 mar 2010, 21:08
autor: beluosus
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.
Odp: [bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
: 25 mar 2010, 20:29
autor: Miziak
OKej ale to nadal nie rozwiązuje ani nie zmniejsza mego problemu ;/
Odp: [bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
: 26 mar 2010, 13:04
autor: sulti
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.
Odp: [bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
: 26 mar 2010, 20:17
autor: Miziak
@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:
Kod: Zaznacz cały
fbsetbg -f /tutaj/wprowadzona/sciezka/do/tapety.jpg
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:
Kod: Zaznacz cały
session.screen0.rootCommand: fbsetbg -f /tutaj/wprowadzona/sciezka/do/tapety.jpg
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...
Odp: [bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
: 26 mar 2010, 22:23
autor: sulti
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
Odp: [bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
: 26 mar 2010, 22:45
autor: Miziak
Powiedz mi jeszcze jak do tego wyrażenia wprowadzić ścieżkę:
Kod: Zaznacz cały
sed -i "s,\(session.screen0.rootCommand.*fbsetbg -f \).*,\1$1," ~/.fluxbox/init
aby dopisywało coś w ten deseń:
Kod: Zaznacz cały
session.screen0.rootCommand: fbsetbg -f /sciezka/do/tapety.jpg
ale podanej w parametrze a nie tak na sztywno
Odp: [bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
: 26 mar 2010, 22:48
autor: sulti
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"
Odp: [bash]Coś jak strumień wejścia w C++ i zamiana ostatniej linni pliku.
: 27 mar 2010, 14:01
autor: Miziak
A no racja ale teraz przyrzekam ostatnie pytanie

jak zrobić aby skrypt otworzył nowy terminal i w nim dopiero się wykonał??