Strona 1 z 1

[BASH] 'sudo su -' w skrypcie.

: 03 lut 2011, 15:02
autor: mihau
Hej.

Chce napisać mały skrypt który będzie instalował aplikacje uruchamianą pod wine, konfigurował ją itp.

Aczkolwiek jest mały zgrzyt, w firmie wszystkie laptopy mają Ubuntu 9.04 a oficjalne repo z wine dla 9.04 wygasły, znalazłem inne z którego się instaluje, lecz wymaga to wrzucenia do /etc/apt/source.list tego repo, więc wiadomo, tylko z roota można zapisać coś w source.list...
Jak to teraz ładnie ująć, żeby wrzucało np. przez sed -i, link repo do source.list'a.

Odp: [BASH] 'sudo su -' w skrypcie.

: 03 lut 2011, 15:26
autor: azhag
Prościej będzie utworzyć plik w katalogu /etc/apt/sources.list.d/.

Wystarczy

Kod: Zaznacz cały

sudo echo wpis >/etc/apt/sources.list.d/plik

Odp: [BASH] 'sudo su -' w skrypcie.

: 03 lut 2011, 22:57
autor: empitt
Lub:

Kod: Zaznacz cały

sudo bash -c "echo 'deb repo...' >> /etc/apt/sources.list"
lub:

Kod: Zaznacz cały

echo 'deb repo...' | sudo tee -a /etc/apt/sources.list

Odp: [BASH] 'sudo su -' w skrypcie.

: 03 lut 2011, 23:44
autor: LukAs
A jeśli z jakiegoś powodu lista Ci się rozrośnie, to możesz zastosować mechanizm osadzania dokumentu lub wczytać repozytoria z pliku. Przy dużej liście adresów, użycie echo robi się niewygodne i trzeba łamać wiersze. No i kod skrypt robi się nieładny/nieczytelny.

Kod: Zaznacz cały

#!/bin/bash

sudo tee -a /etc/apt/sources.list <<EOF
# Wine Ubuntu 10.04
deb http://ppa.launchpad.net/ubuntu-wine/ppa/ubuntu lucid main
# Wine Debian
deb http://wine.budgetdedicated.com/apt
EOF
Jeśli nie chcesz widzieć adresów na ekranie, to można przekierować wyjście do kosza

Kod: Zaznacz cały

sudo tee -a /etc/apt/sources.list 1> /dev/null
Zrób też kopię pliku ;)

Odp: [BASH] 'sudo su -' w skrypcie.

: 04 lut 2011, 11:36
autor: empitt
Przy dużej liście adresów, użycie echo robi się niewygodne i trzeba łamać wiersze.
Przesada...

Kod: Zaznacz cały

#!/bin/bash

sudo bash -c "echo 'deb repo...
deb repo1...
deb repo2...
deb repo3...' >> /etc/apt/sources.list"
No i kod skrypt robi się nieładny/nieczytelny.
Nie zauważyłem tego, aby powyższy kod był nieczytelny i nieładny. Faktycznie Twoja wersja jest o ciut milsza, ale na moje oko echo wcale gorzej nie wypada. Raczej nazwałbym to kwestią gustu i przyzwyczajenia.

Odp: [BASH] 'sudo su -' w skrypcie.

: 04 lut 2011, 12:17
autor: mihau
Potestuję sobie dzisiaj i zobaczymy co z tego wyjdzie;) dzięki wielkie

Odp: [BASH] 'sudo su -' w skrypcie.

: 06 lut 2011, 10:19
autor: azhag
empitt pisze:Przesada...

Kod: Zaznacz cały

#!/bin/bash

sudo bash -c "echo 'deb repo...
deb repo1...
deb repo2...
deb repo3...' >> /etc/apt/sources.list"

Nie zauważyłem tego, aby powyższy kod był nieczytelny i nieładny. Faktycznie Twoja wersja jest o ciut milsza, ale na moje oko echo wcale gorzej nie wypada. Raczej nazwałbym to kwestią gustu i przyzwyczajenia.
Można też:

Kod: Zaznacz cały

cat >plik <<EOF
jeden
dwa
trzy
cztery
EOF

Odp: [BASH] 'sudo su -' w skrypcie.

: 06 lut 2011, 14:33
autor: borzole
można tak:

Kod: Zaznacz cały

main(){
	echo Hello $(whoami)
}
# run_as_root
if [ `id -u` != 0 ] ; then
	abs_path="$(readlink -f `dirname $0`)/$(basename $0)"
	echo "[su -] uruchaminie jako root"
	su -c"/bin/bash $abs_path $*"
else
	main $*
fi

Odp: [BASH] 'sudo su -' w skrypcie.

: 07 lut 2011, 14:51
autor: azhag
borzole pisze:można tak:

Kod: Zaznacz cały

main(){
	echo Hello $(whoami)
}
# run_as_root
if [ `id -u` != 0 ] ; then
	abs_path="$(readlink -f `dirname $0`)/$(basename $0)"
	echo "[su -] uruchaminie jako root"
	su -c"/bin/bash $abs_path $*"
else
	main $*
fi
Drobna poprawka:

Kod: Zaznacz cały

[ `id -u` -ne 0 ]

Odp: [BASH] 'sudo su -' w skrypcie.

: 07 lut 2011, 15:29
autor: borzole
to już chyba jeden pies != czy -ne, czy może jest coś o czym nie wiem?

Odp: [BASH] 'sudo su -' w skrypcie.

: 07 lut 2011, 15:37
autor: azhag
-ne, -eq, -lt i spółka służą do porównywania liczb

Odp: [BASH] 'sudo su -' w skrypcie.

: 07 lut 2011, 16:10
autor: borzole
Tyle to ja wiem, pytam czy jest jakaś różnica w działaniu
[ `id -u` -ne 0 ]
i
[ `id -u` != 0 ]
dla mnie jest bardziej czytelny zapis z C, jest stosowany też w innych językach.