Repository 32bit  Forum
Repository 64bit  Wiki

[BASH] comandi interni a programma

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata e la versione del Kernel. Questi dati aiutano le persone che possono rispondere.
2) Specificare sempre il tipo di shell (bash, sh, csh, etc...)
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 dell'ultima regola 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 22: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 13: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 22: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: 911
Iscritto il: mer apr 25, 2007 14:07
Località: Bari (Provincia)
Distribuzione: ArchLinux

Re: [BASH] comandi interni a programma

Messaggioda ulisse89 » ven set 25, 2009 22: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 13: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 23: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 22: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 23: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 13:53
Località: Bologna
Nome Cognome: Riccardo
Slackware: 13.0
Kernel: 2.6.29.6
Desktop: Xfce

Re: [BASH] comandi interni a programma

Messaggioda cymon » sab set 26, 2009 0: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 2: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 11: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 13: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 1 ospite