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

[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
SIV
Linux 2.6
Linux 2.6
Messaggi: 921
Iscritto il: mer apr 25, 2007 14:07

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

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
Slack_Eater
Linux 2.0
Linux 2.0
Messaggi: 163
Iscritto il: gio feb 14, 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

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

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

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

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.


Torna a “Programmazione”

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti