簡體   English   中英

如何在shell腳本中使用expect

[英]how to use expect inside shell script

我有一個 bash+expect 腳本,它必須連接普通用戶,我想讀取特定文件並將其存儲到變量中,以便在 root 用戶中的特定文件之后使用。 我怎樣才能獲得價值? 我的腳本是:

#!/bin/bash
set prompt ">>> "
set command ls /root/test1

expect << EOF
spawn su root
expect "password:"
send "rootroot\r"
expect "$prompt\r"
send "$command\r"
expect "$prompt\r"
expect -re "(.*)\r\n$prompt\r\n"
EOF

echo "$command"

 if [ ! -f "$command" ]; then

                echo "file is not exist"
else
                echo "file is exist"
            fi

每當我執行我的 shell 腳本時,它都會顯示以下輸出:

ls: /root/: 權限被拒絕

文件不存在

基本上測試在那里,但它顯示“文件不存在”

這個問題很老了,但我希望有人能從這個答案中得到幫助。

--> 您應該使用#!/usr/bin/expect#!/bin/expect來正確使用expectexpect<<EOF可能會起作用,但這不是編寫腳本的常規方法。

--> 你的腳本應該以EOF語句結束。 前任。

#!/usr/bin/expect << EOF
<some stuff you want to do>
EOF

--> 關於spawn一些基本知識。 您在spawn編寫的任何內容都會執行,但不會對整個腳本產生影響。 它不像環境變量。

簡而言之, spawn將啟動新進程並且您的命令不在 spawn 進程中。 前任。

#!/usr/bin/expect
spawn bash -c "su root '<your-cmd-as-root>'"
<some-expect-send-stuff-etc>

現在在你的腳本中, $command應該寫在spawn里面,就像我在上面的例子中展示的那樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM