Repository 32bit  Forum
Repository 64bit  Wiki

[BASH] comandi interni a programma

Forum dedicato alla programmazione.

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.

[BASH] comandi interni a programma

Messaggioda ulisse89 » ven set 25, 2009 21:08

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.
Avatar utente
ulisse89
Packager
Packager
 
Messaggi: 644
Iscritto il: sab gen 17, 2009 12:53
Località: Bologna
Nome Cognome: Riccardo
Slackware: 13.0
Kernel: 2.6.29.6
Desktop: Xfce

Re: [BASH] comandi interni a programma

Messaggioda SIV » ven set 25, 2009 21:24

Se le dichiari come variabili? Tipo:
Codice: Seleziona tutto
user="ulisse89"
password=""provaprova123


E poi le richiami all'interno dello script con:
Codice: Seleziona tutto
$user
$password
Avatar utente
SIV
Linux 2.6
Linux 2.6
 
Messaggi: 918
Iscritto il: mer apr 25, 2007 13:07
Località: Bari (Provincia)

Re: [BASH] comandi interni a programma

Messaggioda ulisse89 » ven set 25, 2009 21:57

Eh così non funziona, oppure, il problema è proprio come richiamarlo nello script.
Esempio:
Codice: Seleziona tutto
#!/bin/bash

USER=ulisse89
PASSWORD=aabbcc
ftp slacky.eu
$USER
$PASSWORD

Lo lancio e lui si ferma in attesa dello username.
Avatar utente
ulisse89
Packager
Packager
 
Messaggi: 644
Iscritto il: sab gen 17, 2009 12:53
Località: Bologna
Nome Cognome: Riccardo
Slackware: 13.0
Kernel: 2.6.29.6
Desktop: Xfce

Re: [BASH] comandi interni a programma

Messaggioda Slack_Eater » ven set 25, 2009 22:12

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:

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


Saluti
Avatar utente
Slack_Eater
Linux 2.0
Linux 2.0
 
Messaggi: 163
Iscritto il: gio feb 14, 2008 21:29
Località: Svizzera
Nome Cognome: Giuseppe Scalzi
Slackware: 13.37
Kernel: 2.6.38.2-smp
Desktop: KDE 4.7.0

Re: [BASH] comandi interni a programma

Messaggioda ulisse89 » ven set 25, 2009 22:28

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.
Avatar utente
ulisse89
Packager
Packager
 
Messaggi: 644
Iscritto il: sab gen 17, 2009 12:53
Località: Bologna
Nome Cognome: Riccardo
Slackware: 13.0
Kernel: 2.6.29.6
Desktop: Xfce

Re: [BASH] comandi interni a programma

Messaggioda cymon » ven set 25, 2009 23:05

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
Avatar utente
cymon
Linux 2.4
Linux 2.4
 
Messaggi: 430
Iscritto il: ven gen 05, 2007 1:40
Località: Milano
Slackware: 13.1
Kernel: 2.6.33.4-smp
Desktop: Fluxbox

Re: [BASH] comandi interni a programma

Messaggioda ulisse89 » sab set 26, 2009 10:11

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

Intato grazie. Però questo va benissimo per ftp. Perchè il comando `user username password` ti permette di specificare insieme username e password.
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

In tal caso si blocca in attesa della password perchè non c'è un opzione che mi permette di passargli anche la password.
Avatar utente
ulisse89
Packager
Packager
 
Messaggi: 644
Iscritto il: sab gen 17, 2009 12:53
Località: Bologna
Nome Cognome: Riccardo
Slackware: 13.0
Kernel: 2.6.29.6
Desktop: Xfce


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti