Se avete problemi con l'installazione e la configurazione di Slackware postate qui. Non usate questo forum per argomenti generali... per quelli usate Gnu/Linux in genere.
Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Slackware, se l'argomento è generale usate il forum Gnu/Linux in genere.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
#!/bin/sh
if [ -e $1 ]
then
ps -p $1 |cut -d "
" -f 2| cut -d " " -f 3
exit
else
echo "Needs arguments"
exit
fi
Ho due domande:
Voglio inserire questo script in conky usando come argomento la variabile di conky top pid, il problema è che non riesco ad accedere a questa variabile in quanto questo script è parte di un'altra variabile, cioé la variabile exec di conky che lo esegue. Avrei quindi bisogno (pensando al C) di una specie di puntatore... esiste qualcosa di simile per uno script bash? Oppure esiste qualche altra soluzione al mio problema?
Altra domanda (stupida):
Per eseguire questo script con successo devo cambiare
Dire che me ne intendo di scripting bash è a dir poco un'esagerazione, comunque ci provo...
non credo di aver capito bene cosa vuoi fare, e sopratutto l'utilità di questo script, comunque, se vuoi passare l'output di top ad uno script puoi usare top in modalità batch avviandolo con l'opzione -b... come al solito "man top"
Per quanto riguarda lo script devi cambiare qualcosa...
#!/bin/sh
if [[ "$1" == "" ]]
then
echo "Needs arguments"
else
ps -p $1 |cut -d "
" -f 2| cut -d " " -f 3
exit
fi
provalo e vedi se va...
Come hai fatto tu, controllavi semplicemente l'esistenza di $1, che c'è sempre ma se non diversamente specificato è uguale a ""...
ho usato il quoting su $1 perchè mi serviva la corrispondenza letterale
Il secondo problema l'ho risolto. Grazie!
Il primo problema lo spiego meglio.
Su conky è possibile vedere grazie alle variabili il PID, la percentuale di utilizzo della CPU e la percentuale di RAM utilizzata dai vari processi ordinati per utilizzo di CPU o di RAM. Io volevo visualizzare anche la shell su cui è in esecuzione i processi e anche qualche altro dato, per questo ho scritto quello script da usare così nel .conkyrc
${top name 1}${top pid 1}${top cpu 1}${top mem 1}${exec /home/alessandro/shell.sh ${top pid 1}}
L'argomento dello script quindi dovrebbe essere il PID del processo che utilizza più CPU, cioé la variabile di conky ${top pid 1}, solo che su conky esce solo l'ultima parentesi graffa, perché utilizza ${top pid 1} come testo e non come variabile.
Chiedevo quindi come accedere alla variabile ${top pid 1} all'interno della variabile exec che esegue lo script... una specie di puntatore in stile C, oppure come esportare la variabile in qualche altro modo a me oscuro...
anycolouryoulike ha scritto:oppure come esportare la variabile in qualche altro modo a me oscuro...
come ti ho detto per esportare in uno script un valore visualizzato da top esiste la modalità batch di top (top -b) "man top" per approfondire, detto questo, non credo che sia fattibile una cosa dinamica come succede con conky che legge in real time top, a meno di mettere il tuo script in esecuzione con texeci ogni secondo...
Se vuoi provare, dovresti, nel tuo script, redirigere l'output di top -b in una pipe, ripulirlo lasciando solo quello che ti interessa e poi darlo in pasto come variabile (invece che come argomento) al ps -p che già hai strutturato...
spero di essere stato chiaro...
posta se hai dubbi...
Ho impostato conky per aggiornarsi ogni secondo, quindi anche exec dovrebbe rieseguire tutto ogni secondo.
Comunque ho fatto tutto con le pipe ed il top -bn 1 (visto che le variabili di conky non sono esportabili ad altri programmi).
Ora faccio uno script per ottenere pure i dati dei processi ordinati però secondo l'utilizzo di memoria e non della CPU come fa top.
Grazie
Ho capito cosa vuoi fare qui viewtopic.php?t=20766.
Il discorso è simile: si tratta di esportare la variabile letta dal read al programma su...
Non credo sia possibile con uno script bash... al massimo si potrebbe trasmettere come argomento ma è impossibile anche questo visto che la password non può essere immessa come argomento nel su...
Ugualmente non è possibile trasmettere le variabili di Conky al mio script...
Tutto ciò naturalmente secondo le poche cose che ho imparato io.
la redirezione è possibile in bash, ma io non so come fare... comunque mi fa piacere che tu sia venuto a capo del tuo problema...
alla fine posta il risultato che voglio vedere com'è
anycolouryoulike ha scritto:
Ovviamente sarei felicissimo di sbagliarmi!
Ovviamente ti sbagli .
I problemi sono diversi, il tuo problema non è della bash, ma riguarda conky. E' conky che non passa niente allo script, molto probabilmente perchè non è stato previsto il passaggio di variabili interne nel comando ${exec} di conky. Sta tranquillo che se conky passava al tuo script, il pid del processo, allora il tuo script si trovava come $1 il pid del processo.
Tramite bash non passi solo argomenti ad un programma (gli argomenti sono quelli che si passano sulla 'riga di comando' di un programma), ma puoi benissimo passargli anche lo standard input tramite pipe o ridirezione. Il problema di danix85 però è un altro.
Grazie del chiarimento spina, ma non credo di essermi sbagliato: hai confermato quello che ho scritto.
spina ha scritto:I problemi sono diversi, il tuo problema non è della bash, ma riguarda conky. E' conky che non passa niente allo script, molto probabilmente perchè non è stato previsto il passaggio di variabili interne nel comando ${exec} di conky. Sta tranquillo che se conky passava al tuo script, il pid del processo, allora il tuo script si trovava come $1 il pid del processo.
So che è il problema è di conky, perchè (come ho detto prima) non mi fa accedere a quella variabile dentro alla variabile exec, per questo pensavo a una specie di puntatore. So che la redirezione è possibile, ma nel caso dello script che sta facendo danix la bash non può interagire con su finchè su è in esecuzione.
spina ha scritto:Tramite bash non passi solo argomenti ad un programma (gli argomenti sono quelli che si passano sulla 'riga di comando' di un programma), ma puoi benissimo passargli anche lo standard input tramite pipe o ridirezione. Il problema di danix85 però è un altro.
Appunto, ma su non prende nessun standard input, prende solo argomenti!
danix85 ha scritto:la redirezione è possibile in bash, ma io non so come fare... comunque mi fa piacere che tu sia venuto a capo del tuo problema...
alla fine posta il risultato che voglio vedere com'è
#!/bin/bash
# Script che visualizza l'user (-u), la shell (-s),
# il time (-r) o lo start (-t) del processo identificato
# dal secondo argomento ($2) per ordine di utilizzo di RAM (-r) o CPU (-c).
if
[ -n $3 ]
then
:
else
echo "Needs arguments"
exit
fi
case $3 in
-c) usage=$"2" ;;
-r) usage=$"3" ;;
-*) echo "Invalid argument" ; exit ;;
esac
count=$2
process ()
{
ps aux |sed 1d |sort -nr +3 |sed -n "$count"p
}
end ()
{
line=$1
if
[ -z "$line" ]
then
echo "Invalid process number"
exit
else
echo $line
exit
fi
}
shell ()
{
end `process |awk '{print $7}'`
}
start_timer ()
{
end `process |awk '{print $9}'`
}
run_timer ()
{
end `process |awk '{print $10}'`
}
user ()
{
end `process |awk '{print $1}'`
}
case $1 in
-s) shell ;;
-r) run_timer ;;
-t) start_timer ;;
-u) user ;;
-*) echo "Invalid argument" ; exit ;;
esac
Son riuscito a finirlo solo oggi.
Gli argomenti vanno messi nell'ordine con cui sono scritti nei commenti all'inizio dello script.
Io l'ho messo su Conky e sembra funzionare...
Se hai qualche miglioramento da apportare fammelo sapere!
Ciao