ファイルから予想されるスクリプトコマンドを読み込む[閉じる]

ファイルから予想されるスクリプトコマンドを読み込む[閉じる]

複数のゲートウェイの構成を更新する必要があります...ファイルが2つあります。

ファイル1(ip.txt):ゲートウェイのIPアドレスを保存します。 --->このファイルは毎月更新されます。

ファイル2(cmd.txt):ゲートウェイの設定を変更するためのコマンドを保存します。 --->もやはり随時更新されます。

これまでにスクリプトが2つあります...

スクリプト 1 つまりscript1.sh: デフォルトでは、script1 はゲートウェイ IP を読み取り、それを渡し、スクリプトがゲートウェイにログインすることを期待します。

#!/bin/sh
for device in `cat /home/ip.txt`;do
./step_3 $device;
done

2番目のスクリプト

#!/bin/expect -f

set IP [lindex $argv 0]

spawn ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@$IP

expect "password: "

send "difficult123\r"

expect "GBU_0:"

send "su -\r"
expect "Password: "

send "verydifficult123\r"

expect "GBI_0:"

send "/17.1/bin/cli.exe\r"

expect "USERNAME : "

send "GOOR\r"

expect "PASSWORD : "

send "DIFFICULT123\r"

expect "] "
****************** POINT 1 - Only One Change command shown -- I have multiple commands here to insert-----

send "CHG-MEM:SEV=CRITICAL;\r"

expect "(Y/N) :"

send "Y\r"

expect "]"
******************** POINT 2

send "exit\r"

expect "0:~> "

send "exit\r"

expect "logout"

send "exit\r"

expect "closed"

expect eof

ポイント1と2に期待コマンドをハードコーディングすると、すべてが魅力のように動作します(複数のコマンドがあります)...ファイルからポイント1と2に期待コマンドを呼び出すにはどうすればよいですか?ユーザーがスクリプトに触れることなくコマンドファイルを更新して実行できるように、内部でコマンドをハードコーディングせずに別々のファイルに保存したいのですが、必要なスクリプト効果にIPを渡します。わかりました...わかりませんが、ファイルからも予想されるコマンドを渡すことができる場合。

答え1

TCL は、他のファイルからのコマンドを簡単に含めて実行できます。source(n)たとえば、コマンドを使用すると、次のように話すことができます。

#!/usr/bin/env expect

package require Tcl 8.5

set IP [lindex $argv 0]
set include_file [lindex $argv 1]

# ... begin commands before here

catch {source $include_file} result options
if {[dict get $options -code] != 0} {
    puts stderr "could not source $include_file: $result"
    exit 1
}

# end commands after here ...

runnerインクルードファイルを持つには、1 つとして保存します。

$ cat runthese 
puts a
puts b
puts c
$ expect runner 127.0.0.1 runthese
a
b
c
$ 

もちろん、runthese含めるファイルや任意のファイルを必要に応じて持つようにsend変更することもできます。expect

関連情報