[BASH] comandi interni a programma
Moderatore: Staff
Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
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.
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
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.
- ulisse89
- Packager

- Messaggi: 643
- Iscritto il: sab 17 gen 2009, 12:53
- Nome Cognome: Riccardo
- Slackware: 13.0
- Kernel: 2.6.29.6
- Desktop: Xfce
- Località: Bologna
[BASH] comandi interni a programma
Premetto di non sapere quasi niente di bash scripting e che questa è solo una curiosità. Passo alla domanda.
Come faccio, all'interno di uno script, dopo aver eseguito un programma che accetta valori in input,a passarglieli?
Faccio un esempio che magari è più chiaro. Eseguo ftp nomeserver. Per fare il login automatico dove e come li scrivo username e password nello script?
E' probabile che sia una cavolata ma non trovo niente cercando su google anche perchè faccio fatica a trovare le parole giuste da cercare.
Come faccio, all'interno di uno script, dopo aver eseguito un programma che accetta valori in input,a passarglieli?
Faccio un esempio che magari è più chiaro. Eseguo ftp nomeserver. Per fare il login automatico dove e come li scrivo username e password nello script?
E' probabile che sia una cavolata ma non trovo niente cercando su google anche perchè faccio fatica a trovare le parole giuste da cercare.
Re: [BASH] comandi interni a programma
Se le dichiari come variabili? Tipo:
E poi le richiami all'interno dello script con:
Codice: Seleziona tutto
user="ulisse89"
password=""provaprova123Codice: Seleziona tutto
$user
$password- ulisse89
- Packager

- Messaggi: 643
- Iscritto il: sab 17 gen 2009, 12:53
- Nome Cognome: Riccardo
- Slackware: 13.0
- Kernel: 2.6.29.6
- Desktop: Xfce
- Località: Bologna
Re: [BASH] comandi interni a programma
Eh così non funziona, oppure, il problema è proprio come richiamarlo nello script.
Esempio:
Lo lancio e lui si ferma in attesa dello username.
Esempio:
Codice: Seleziona tutto
#!/bin/bash
USER=ulisse89
PASSWORD=aabbcc
ftp slacky.eu
$USER
$PASSWORD- Slack_Eater
- Linux 1.x

- Messaggi: 163
- Iscritto il: gio 14 feb 2008, 21:29
- Nome Cognome: Giuseppe Scalzi
- Slackware: 13.37
- Kernel: 2.6.38.2-smp
- Desktop: KDE 4.7.0
- Località: Svizzera
- Contatta:
Re: [BASH] comandi interni a programma
Per risolvere i problemi di interattività all'interno degli script ti può essere utile expect, che risolve problemi come il tuo:
http://en.wikipedia.org/wiki/Expect
Trovi anche degli esempi su wikipedia per esempio per l'ftp:
Saluti
http://en.wikipedia.org/wiki/Expect
Trovi anche degli esempi su wikipedia per esempio per l'ftp:
Codice: Seleziona tutto
# Open an ftp session to a remote server, and wait for a username prompt.
spawn ftp $remote_server
expect "username:"
# Send the username, and then wait for a password prompt.
send "$my_user_id\r"
expect "password:"
# Send the password, and then wait for an ftp prompt.
send "$my_password\r"
expect "ftp>"
# Switch to binary mode, and then wait for an ftp prompt.
send "bin\r"
expect "ftp>"
# Turn off prompting.
send "prompt\r"
expect "ftp>"
# Get all the files
send "mget *\r"
expect "ftp>"
# Exit the ftp session, and wait for a special end-of-file character.
send "bye\r"
expect eof
- ulisse89
- Packager

- Messaggi: 643
- Iscritto il: sab 17 gen 2009, 12:53
- Nome Cognome: Riccardo
- Slackware: 13.0
- Kernel: 2.6.29.6
- Desktop: Xfce
- Località: Bologna
Re: [BASH] comandi interni a programma
Expect proprio non lo conoscevo grazie. Funziona e realizza ciò che volevo. Pensavo però che ci fosse un qualcosa che potesse essere scritto in bash scripting.
- cymon
- Linux 2.x

- Messaggi: 430
- Iscritto il: ven 5 gen 2007, 1:40
- Slackware: 13.1
- Kernel: 2.6.33.4-smp
- Desktop: Fluxbox
- Località: Milano
- Contatta:
Re: [BASH] comandi interni a programma
Se il tuo cruccio è ftp quello che faccio di solito io è far produrre dallo script una lista comandi ftp che poi viene data in pasto a ftp tramite il comando -f.
Codice: Seleziona tutto
#FTP
cat > ftp.script << END
set ftp:ssl-allow false
open $FTP_SERVER
user $FTP_USER $FTP_PASSWORD
cd $FTP_DIRECTORY
put $FILE
END
echo "FTP commands..."
cat ftp.script
lftp -f ftp.script
rm ftp.script- ulisse89
- Packager

- Messaggi: 643
- Iscritto il: sab 17 gen 2009, 12:53
- Nome Cognome: Riccardo
- Slackware: 13.0
- Kernel: 2.6.29.6
- Desktop: Xfce
- Località: Bologna
Re: [BASH] comandi interni a programma
Intato grazie. Però questo va benissimo per ftp. Perchè il comando `user username password` ti permette di specificare insieme username e password.cymon ha scritto:Se il tuo cruccio è ftp quello che faccio di solito io è far produrre dallo script una lista comandi ftp che poi viene data in pasto a ftp tramite il comando -f.
Codice: Seleziona tutto
#FTP cat > ftp.script << END set ftp:ssl-allow false open $FTP_SERVER user $FTP_USER $FTP_PASSWORD cd $FTP_DIRECTORY put $FILE END echo "FTP commands..." cat ftp.script lftp -f ftp.script rm ftp.script
Il mio cruccio non è ftp, ma in generale. Per esempio se dovessi fare un login automatico con ssh potrei fare:
Codice: Seleziona tutto
ssh -l ulisse89 numero_ip