argv가 제공되지 않으면 스크립트 오류가 발생합니다.

argv가 제공되지 않으면 스크립트 오류가 발생합니다.

SSH 로그인을 위해 Expect 스크립트를 실행해야 하는데, 명령 실행 시 argv를 제공하는 파일을 생성해야 합니다.

다음 스크립트 파일을 실행하면 생성됩니다.

#!/usr/bin/expect

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

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

명령 출력

[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

그러나 argv를 사용하면 스크립트가 작동하고 파일이 생성됩니다. 내가 원하는 것은 스크립트를 실행하는 동안 argv가 제공되지 않으면 ./demo오류가 발생하고 argv는 A 또는 B여야 하고 그 외에는 아무 것도 없어야 한다는 것입니다.

가능합니까?

답변1

상단 어딘가에 다음과 같은 것을 추가하십시오.

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

llength(n)목록 길이 절차에 대한 자세한 내용은 참고자료를 참조하세요. Aor 는 표현식을 B단일 인수로 if허용하기 때문에 expr(n)( 매우 이상한 제한 사항)

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
}

답변2

호출할 필요가 없습니다 date. 실제로 2개의 내장 명령이 있을 것으로 예상하세요.

  1. 이것clockTcl의 명령

    set date [clock format [clock seconds] -format "%d-%B-%Y"]
    
  2. 또는 timestamp명령을 기대

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

다른 날짜 형식을 사용하는 것이 좋습니다. %Y-%m-%d- 이는 ISO8601 표준입니다. 이것은 분명합니다. 그리고 어휘 순서와 연대순 순서는 동일합니다.

관련 정보