[英]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
來正確使用expect
, expect<<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.