Pagina 1 di 1

[BASH] comandi interni a programma

Inviato: ven 25 set 2009, 22:08
da ulisse89
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.

Re: [BASH] comandi interni a programma

Inviato: ven 25 set 2009, 22:24
da SIV
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

Re: [BASH] comandi interni a programma

Inviato: ven 25 set 2009, 22:57
da ulisse89
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.

Re: [BASH] comandi interni a programma

Inviato: ven 25 set 2009, 23:12
da Slack_Eater
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

Re: [BASH] comandi interni a programma

Inviato: ven 25 set 2009, 23:28
da ulisse89
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.

Re: [BASH] comandi interni a programma

Inviato: sab 26 set 2009, 0:05
da cymon
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

Re: [BASH] comandi interni a programma

Inviato: sab 26 set 2009, 11:11
da ulisse89
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.