셸 스크립트의 명령줄을 통해 예상에 인수를 전달하는 방법
expect
쉘 스크립트의 명령줄을 통해 인수를 전달하고 있습니다.
나는 이것을 시도했다
#!/usr/bin/expect -f
set arg1 [lindex $argv 0]
spawn lockdis -p
expect "password:" {send "$arg1\r"}
expect "password:" {send "$arg1\r"}
expect "$ "
하지만 작동하지 않습니다. 알아낼 수 있도록 도와주세요.
감사 해요
인수에서 읽으려면 다음과 같이 간단히 수행할 수 있습니다.
set username [lindex $argv 0];
set password [lindex $argv 1];
그리고 그것을 인쇄
send_user "$username $password"
해당 스크립트가 인쇄됩니다
$ ./test.exp user1 pass1
user1 pass1
디버그 모드를 사용할 수 있습니다.
$ ./test.exp -d user1 pass1
더 나은 방법은 다음과 같습니다.
lassign $argv arg1 arg2 arg3
그러나 방법도 잘 작동해야 합니다. arg1
검색 되었는지 확인합니다 . 예를 들어 send_user "arg1: $arg1\n"
.
#!/usr/bin/expect
set username [lindex $argv 0]
set password [lindex $argv 1]
log_file -a "/tmp/expect.log"
set timeout 600
spawn /anyscript.sh
expect "username: " { send "$username\r" }
expect "password: " { send "$password\r" }
interact
이 가이드 와 함께 제공되는 답변 이 마음에 듭니다 . 구문 분석 인수 프로세스를 생성합니다.
#process to parse command line arguments into OPTS array
proc parseargs {argc argv} {
global OPTS
foreach {key val} $argv {
switch -exact -- $key {
"-username" { set OPTS(username) $val }
"-password" { set OPTS(password) $val }
}
}
}
parseargs $argc $argv
#print out parsed username and password arguements
puts -nonewline "username: $OPTS(username) password: $OPTS(password)"
위의 내용은 단편일 뿐입니다. 가이드 전체를 읽고 충분한 사용자 인수 검사를 추가하는 것이 중요합니다.
note, sometimes argv 0 is the name of the script you are calling. so if you run it that way, argv 0 doesn't work,
for me I run "> expect script.exp password"
that makes argv 1 = password argv 0 = script.exp
Args with spaces are fine, assuming the arg you want is the first after the script name ($0
is script name, $1
is first arg, etc.)
Make sure you use "$ARG"
NOT $ARG
as it wil NOT include the whitespace, but break them up into individual args. Do this in your bash
script:
#!/bin/bash
ARG="$1"
echo WORD FROM BASH IS: "$ARG" #test for debugging
expect -d exp.expect "$ARG"
exit 0
Also, as the first answer states, use debug mode, (the -d
flag) It will output your argv
variables as expect
sees them, should show you what is going on.
ReferenceURL : https://stackoverflow.com/questions/17059682/how-to-pass-argument-in-expect-through-command-line-in-shell-script
'IT이야기' 카테고리의 다른 글
Node.js에 없는 경우에만 파일 생성 (0) | 2021.09.30 |
---|---|
MapKey 대 HasForeignKey 차이점 - Fluent Api (0) | 2021.09.30 |
AngularJS: $resource를 사용하여 파일 업로드(솔루션) (0) | 2021.09.30 |
EPPlus를 사용한 Excel 날짜 형식 (0) | 2021.09.30 |
dataTable() 대 DataTable() - 차이점이 있는 이유와 함께 작동 (0) | 2021.09.30 |