solicita um erro quando nenhum argv é fornecido para esperar script

1

Eu tenho que executar um script de espera para fins de login ssh, mas eu preciso criar um arquivo fornecendo o argv durante a execução do comando.

Quando eu executo este arquivo de script abaixo é criado.

#!/usr/bin/expect

set file [lindex $argv 0]
set date [exec date "%Y-%m-%d"]

spawn sh -c "touch output-$file-$date.csv"

saída do comando

[root@centseven ~]# ./demo A
spawn sh -c touch output-A-2017-September-21.csv
[root@centseven ~]# ll output-
output--2017-September-21.csv   output-A-2017-September-21.csv

Mas com o argv, o script funciona & o arquivo é criado, o que eu quero é, se o argv não for fornecido durante a execução do script ./demo , então ele deve dar erro & o argv deve ser A ou B nada além disso.

Isso é possível.

    
por Shanker 21.09.2017 / 14:20

2 respostas

3

Em algum lugar no topo, adicione algo como

if {[llength $argv] == 0} {
  puts stderr "Usage: $argv0 file"
  exit 1
}

Consulte llength(n) para detalhes sobre o procedimento de comprimento de lista. Para precisamente apenas A ou B como o único argumento (uma limitação muito estranha) if aceita expr(n) expressões então

if {[llength $argv] != 1} {
  puts stderr "Usage: $argv0 (A|B)"
  exit 1
}
set firstarg [lindex $argv 0]
if {!($firstarg eq "A" || $firstarg eq "B")} {
  puts stderr "Usage: $argv0 (A|B)"
  exit 1
}
    
por 21.09.2017 / 14:49
2

Você não precisa chamar date : o expect tem 2 comandos internos para isso:

  1. o comando clock da Tcl

    set date [clock format [clock seconds] -format "%d-%B-%Y"]
    
  2. ou o comando timestamp esperado

    set date [timestamp -format "%d-%B-%Y"]
    

Recomendamos enfaticamente que você use um formato de data diferente: %Y-%m-%d - esse é o padrão ISO8601. Não é ambíguo. E ordena o mesmo lexical e cronologicamente.

    
por 21.09.2017 / 17:04