shell互動程式自動執行

2021-07-11 14:14:21 字數 3269 閱讀 7992

最近遇到乙個問題:需要對單板emmc進行分割槽,執行fdisk,手動分割槽。當批量生產時,會使效率極低,且容易出錯。經過蒐集資料,發現expect可以實現互動程式的自動執行。

1.了解expect

首先在ubuntu上apt-get install expect,看看是個怎麼回事。執行expect,不明所以。man expect 看不懂看不懂。

找度娘,看到了這一篇:看了一堆理論,不如裡面適合我的兩個菜鳥程式最給力。感謝博主。

具體expect的用法理論,其實到現在還是不懂,且用且增加吧,此處未完待續。。。

2.交叉編譯移植expect

我是要在我的目標板使用expect 啊,當然需要交叉編譯移植了。

此處參考了:跪謝。

移植步驟:

(2)編譯tcl:

tar xvf tcl8.4.11-src.tar.gz

cd tcl8.4.11

vi readme   //大概了解了一下,裡面給出了compiling and installing的參考鏈結

cd unix

./configure --prefix=/home/hya/2100_test/0503/expect/install/tcl --host=i586-poky-linux-uclibc。 //交叉工具鏈為:i586-poky-linux-uclibc

make

make install

在/home/hya/2100_test/0503/expect/install/tcl目錄下生成bin  include  lib  man目錄,表示ok

tar xvf expect5.45.tar.gz

cd expect5.45

./configure //注:expect不支援交叉編譯,所以configure選擇預設配置,生成makefile後修改cc

vi makefile

修改 line:137 cc= i586-poky-linux-uclibc-gcc 儲存退出

make

error:

(1)exp_command.c:22:27: fatal error: sys/stropts.h: no such file or directory

修改 vi exp_command.c  使其包含#include 去掉

(2)ld: cannot find -lieee

修改makefile,191行,去掉 -lieee

(3)i586-poky-linux-uclibc-gcc \

-pipe -o2 -fomit-frame-pointer -wall -fpic  \

-wl,--export-dynamic  \

-o expect exp_main_exp.o \

-l/home/hya/2100_test/0503/expect/expect5.45 -lexpect5.45 \

-l/home/hya/2100_test/0503/expect/tcl8.4.11/unix -ltcl8.4 \

-ldl  -lieee -lm \

-wl,-rpath,/home/hya/2100_test/0503/expect/__install/tcl/lib \

-wl,-rpath,/home/hya/2100_test/0503/expect/__install/tcl/lib/expect5.45

/opt/clanton-tiny/1.4.2/sysroots/x86_64-pokysdk-linux/usr/libexec/i586-poky-linux-uclibc/gcc/i586-poky-linux-uclibc/4.7.2/ld: cannot find -lieee

collect2: error: ld returned 1 exit status

修改makefile,398行,去掉 -lieee

(4)出現 i586-poky-linux-uclibc-gcc \

-pipe -o2 -fomit-frame-pointer -wall -fpic  \

-wl,--export-dynamic  \

-o expect exp_main_exp.o \

-l/home/hya/2100_test/0503/expect/expect5.45 -lexpect5.45 \

-l/home/hya/2100_test/0503/expect/tcl8.4.11/unix -ltcl8.4 \

-ldl  -lm \

-wl,-rpath,/home/hya/2100_test/0503/expect/__install/tcl/lib \

-wl,-rpath,/home/hya/2100_test/0503/expect/__install/tcl/lib/expect5.45

: expect

(echo 'if ' ; \

echo 'package ifneeded expect 5.45 \

[list load [file join $dir libexpect5.45.so]]'\

) > pkgindex.tcl

仍有問題,不過編譯生成了expect 和 libexpect5.45.so,就沒有繼續往下執行。

3.目標板使用expect

將tcl生成的目錄拷入目標板對應的目錄下,將libexpect5.45.so、libtcl8.4.so 拷入/lib目錄下

expect 拷入/bin目錄下,即可使用。

4.shell中使用expect

將fdisk 分割槽命令實現自動執行。

不過發現expect片段無法放入 if語句或shell函式中均會提示語法錯誤,可能是由於exit的原因吧,具體原因還沒搞清楚,需要進一步學習expect。

expect<

spawn fdisk /dev/mmcblk0

expect "n"              //expect的部分自己任意指定,無需特別指出。

send "n\n"

expect "p"

send "p\n"

expect "1"

send "1\n"

expect "par"

send "\n"  

expect "fin"

send "40000\n"

expect "w"    

send "w\n"

expect eof

exit      

end 

第一篇部落格,參考了許多網友的文章,寫的也不是很好。在此非常感謝,也希望該文章能給需要的人帶來一點幫助。

shell 自動互動

你了解linux系統麼?你是linux系統的應用者麼?如果你要學習linux,你可能會遇到linux shell自動互動問題,這裡將介紹linux shell自動互動的解決方法,在這裡拿出來和大家分享一下。你了解linux系統麼?你是linux系統的應用者麼?如果你要學習linux,你可能會遇到li...

shell 後台自動執行

用nohup命令讓linux下程式永遠在後台執行 自 usr local mysql bin mysqld safe user mysql 但是我們很多程式並不象mysqld一樣可以做成守護程序,可能我們的程式只是普通程式而已,一般這種程式即使使用 結尾,如果終端關閉,那麼程式也會被關閉。為了能夠後...

自動執行shell指令碼

scpfile.sh scp複製指定檔案到遠端伺服器指定目錄,在遠端主機上執行命令。bin bash ipfile.txt是jar或war包與目標主機ip對應關係 tmp.txt是臨時存放jar或war包記錄和日誌 scpfile.sh呼叫目標主機上的renamerun.sh,執行備份和執行操作 s...