最近遇到乙個問題:需要對單板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...