Funzioni semplici da mettere nel .bashrc

Se avete dubbi o domande sulla programmazione in generale, fatele qui
Rispondi
aleph
Robin Hood
Messaggi: 1530
Iscritto il: 12 febbraio 2008, 16:30
Contatta:

Messaggio da aleph » 9 novembre 2008, 15:02

Ho fatto un paio di funzioni semplici-semplici per avviare-fermare-ecc i demoni senza dover digitare sempre sudo /etc/rc.d/*** xxx :P finora non mi hanno dato problemi e le trovo molto comode (le ho messe nel .bashrc ;). . . l'uso è semplicissimo, ad esempio per fermare mpd basta dare '$ stop mpd' e per riavviare samba '$ restart samba' . . magari possono essere utili a qualcun'altro o potete darmi qualche consiglio/indicazione su possibili bug/miglioramenti :P :

Codice: Seleziona tutto

daemon_do() {
	DAEMON="/etc/rc.d/$1"
	if [ -f "$DAEMON" ]
	then
		if [[ "`id -u`" == "0" ]] 
		then
			"$DAEMON" "$2"
		else
			sudo "$DAEMON" "$2"
		fi
		return $?
	else
		return 1
	fi
}
start() {
	daemon_do "$1" start
}
stop() {
	daemon_do "$1" stop
}
restart() {
	if [ -f "/etc/rc.d/$1" ]
	then	
		daemon_do "$1" restart
	else
		killall "$1"
		if $?
		then
			"$1" &
		fi
	fi
}
reload() {
	daemon_do "$1" reload
}
sync() {
	daemon_do "$1" sync
}
inoltre ne ho fatta anche una per attivare-fermare il nat tra due interfacce di rete . . non sono un esperto di iptables, ho un po scopiazzato in giro, ma funziona piuttosto bene ;) :

Codice: Seleziona tutto

nat() {
	. /etc/rc.conf
	. /etc/rc.d/functions
	if [[ "`id -u`" != "0" ]]
	then 
		sudo nat $@
		return $?
	fi
	if [[ $1 == "stop" ]]
	then
		stat_busy "stopping nat"
		iptables -t nat -F
		iptables -F
		echo 0 > /proc/sys/net/ipv4/ip_forward
		stat_done
	else 
		if [[ ( $1 == "start" ) && ( $# == "3" ) ]]
		then
			INTIF=$2
			EXTIF=$3
			stat_busy "nat-ing from $INTIF to $EXTIF"
			echo 1 > /proc/sys/net/ipv4/ip_forward
			iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
			iptables -A FORWARD -i $EXTIF -o $INTIF -m state --state RELATED,ESTABLISHED -j ACCEPT
			iptables -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
			stat_done
		else 
			echo "usage: $0 [stop,start source dest]"
		fi
	fi
}
ciao :P
Ultima modifica di aleph il 9 novembre 2008, 15:05, modificato 1 volta in totale.
ImmagineOutside of a dog, computers are a man's best friend, inside a dog it's too dark to type.

psychoweb
Novello Arciere
Messaggi: 108
Iscritto il: 15 luglio 2008, 8:58

Messaggio da psychoweb » 10 novembre 2008, 16:39

è un'idea molto buona, per le mie esigenze la trovo più che utilissima!
spesso devo avviare/fermare demoni da user, e tra sudo e il path degli script in rc.d mi sono ridotto ad una scimmia ammaestrata che con l'aiuto del tasto tab ci mette due sudatissimi secondi per scrivere tutta quella roba. In effetti uno script del genere è proprio quello che ci vuole, tra l'altro è semplicissimo, non so perchè non ci avevo pensato :D

anzi, mi sa che come esercizio didattico provo a riscriverlo per conto mio, poi nel caso confronto, o se proprio non ci riesco, lo "rubo" da questa pagina.... ;)

weseven
Little John
Messaggi: 812
Iscritto il: 26 agosto 2007, 16:04
Località: Mirano (VE)
Contatta:

Messaggio da weseven » 10 novembre 2008, 17:48

mhà, io continuo a preferire la history search di bash alle funzioni personalizzate. è più trasparente, più veloce e non mi dimentico pezzi che non userò mai nel .bashrc o da altre parti.
flickr - proud Archer , nonchè miracolato.
Ballmer's Peak user.

psychoweb
Novello Arciere
Messaggi: 108
Iscritto il: 15 luglio 2008, 8:58

Messaggio da psychoweb » 11 novembre 2008, 2:29

mi sono permesso di scrivere due righe che potrebbero migliorare l'utilità delle tue funzioni.

provo a scriverle con i tuoi nomi di funzione:

Codice: Seleziona tutto

function _daemon_do () {
  cur=${COMP_WORDS[COMP_CWORD]}
  COMPREPLY=( $( compgen -W '$(ls /etc/rc.d/)' -- $cur ) )
}

complete -F _daemon_do start stop restart
Insomma, ho provato a programmare un possibile completamento bash. A essere sincero ci ho messo un bel po' per tirare fuori questa cosa, alla fine ho scopiazzato da qualche esempio perchè la man page di bash a riguardo è molto (ma molto!) criptica, e l'ho personalizzato secondo le esigenze.
Anche qui, è una questione di comodità personale, a me risparmia di scrivere "jack-audio-connection-kit" che completa di solito quando eseguo il comando "sudo /etc/..." ...etc. ;)
a questo punto però lo vedrei più come scriptino a sè stante, l'idea mi piace, e spero di non essere l'unico :-P

@weseven: io la history di bash l'ho disabilitata, quindi verrebbe un po' male la ricerca in quel modo (e no, non la riabiliterei solo per la gestione dei demoni). Inoltre come ho scritto prima potrebbe benissimo essere uno script autonomo, fuori da .bashrc.....e magari impacchettato e installato con pacman ;)

Naturalmente esagero, dopo tutto è una questione di gusti. Ad esempio, io sono un fanatico della sostuzione bash con i punti esclamativi (stile "!-2:1"), ma riconosco che può non essere il massimo della vita per altri :)

Rispondi