[问题]求助,能不能让shell脚本向程序输入多行命令参数?

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
头像
Nile
帖子: 990
注册时间: 2006-07-15 11:20
来自: 枫叶刀市

[问题]求助,能不能让shell脚本向程序输入多行命令参数?

#1

帖子 Nile » 2007-04-28 16:28

有些命令参数无法一行输完,比如瑞捷的xrgsu,需要按回车才能输入下一个参数,能不能用一个shell脚本一次性把这些参数都输完?

谢谢每一个回帖的朋友!
Thinkpad T400
头像
Nile
帖子: 990
注册时间: 2006-07-15 11:20
来自: 枫叶刀市

#2

帖子 Nile » 2007-04-28 17:02

自己顶一下,每次上网输用户名和密码真的很烦啊!
xsupplicant 也用不成。
Thinkpad T400
头像
stlxv
论坛版主
帖子: 8275
注册时间: 2006-05-03 0:39
来自: المريخ

#3

帖子 stlxv » 2007-04-28 17:12

Nile 写了:自己顶一下,每次上网输用户名和密码真的很烦啊!
xsupplicant 也用不成。
xsupplicant设置好用户名和密码(在配置文件里面)之后就根本不用去理会它啦,你让它全自动运行就行了。

多行的写法:

代码: 全选

command_you_want param1 param2 param3 \
param4 param5 \
param6 ...
PHP是最好的语言!不服来战!
头像
Nile
帖子: 990
注册时间: 2006-07-15 11:20
来自: 枫叶刀市

#4

帖子 Nile » 2007-04-28 17:20

谢谢楼上老兄了!

我的xsupplicant总出错

代码: 全选

Values [0..7] cannot be combined with character attributes!
Thinkpad T400
头像
Nile
帖子: 990
注册时间: 2006-07-15 11:20
来自: 枫叶刀市

#5

帖子 Nile » 2007-04-28 17:24

stlxv 写了:
Nile 写了:自己顶一下,每次上网输用户名和密码真的很烦啊!
xsupplicant 也用不成。
xsupplicant设置好用户名和密码(在配置文件里面)之后就根本不用去理会它啦,你让它全自动运行就行了。

多行的写法:

代码: 全选

command_you_want param1 param2 param3 \
param4 param5 \
param6 ...
不是脚本的多行啦,是命令必修多次按回车输入参数啊。
Thinkpad T400
ziyun
帖子: 262
注册时间: 2007-03-29 12:59

#6

帖子 ziyun » 2007-04-28 17:35

echo -e "a\nb\nc\n"| command
你试试这个,我没测试,只是个设想
ziyun
帖子: 262
注册时间: 2007-03-29 12:59

#7

帖子 ziyun » 2007-04-28 17:41

我已经测试了,可行

代码: 全选

#!/bin/bash
read a
echo $a
read b
echo $b
read c
echo $c
~

代码: 全选

[test@ziyun test]$ echo -e "1\n2\n3\n"| ./return.sh  
1
2
3
头像
Nile
帖子: 990
注册时间: 2006-07-15 11:20
来自: 枫叶刀市

#8

帖子 Nile » 2007-04-28 23:35

先谢谢楼上的。

理论上应该没错,可以把参数分别传给程序,但我研究了半天,总感觉在参数前好像多传了一个回车之类的东西,理由是xrgsu得到的参数好像都后措了一位!因为没法看到具体参数所以只是推测(也有可能根本没传进去)。

但可以试试

代码: 全选

echo -e "/home"| cd
没有任何反应!
再试试

代码: 全选

sudo echo -e "aa" | gvim
打开的文件是“未命名”!
aa并没有传给gvim,奇怪!

我又试了一下文件输入重定向的方法,
新建一个文本aa.sh

代码: 全选

aa
再输入

代码: 全选

gvim < aa.sh
新建的文件名还是“未命名”!

求高人指教!
Thinkpad T400
ziyun
帖子: 262
注册时间: 2007-03-29 12:59

#9

帖子 ziyun » 2007-04-28 23:41

提醒你一下,并不是所有的命令都接受管道输入,只有接受标准输入的命令才接受管道输入
头像
Nile
帖子: 990
注册时间: 2006-07-15 11:20
来自: 枫叶刀市

#10

帖子 Nile » 2007-04-29 6:59

ziyun 写了:提醒你一下,并不是所有的命令都接受管道输入,只有接受标准输入的命令才接受管道输入
oh! 谢谢楼上的热心帮助。

不是很明白,估计没戏了.....
Thinkpad T400
ziyun
帖子: 262
注册时间: 2007-03-29 12:59

#11

帖子 ziyun » 2007-04-29 14:01

这里有一个自动输入用户名和密码的telnet shell 或许对你有帮助

原载chinaunix.net shell版 作者panlm

发表于: 2003-11-13 10:00


自动输入用户名和密码用于tenlnet的shell, 哈哈

用linux的朋友且经常用配置路由器的可有福了. :)

今天刚刚完成, 大家多提意见 :)

#===========autotelnet.sh==============
#!/bin/bash
if (( $# != 1 ))
then
echo " usage: $0 address "
exit 1
fi
ip=$1
inp1=`cat param |grep "$ip" |awk '{ print $2 }'`
inp2=`cat param |grep "$ip" |awk '{ print $3 }'`
inp3=`cat param |grep "$ip" |awk '{ print $4 }'`

inputfile=in
outputfile=out
rm -fr $inputfile
rm -fr $outputfile
mknod $inputfile p
touch $outputfile

#file description 7 for out and 8 for in
exec 7<>$outputfile
exec 8<>$inputfile

telnet $ip <&8 >&7 &

sleep 1; echo $inp1 >> $inputfile
sleep 1; echo $inp2 >> $inputfile
sleep 1; echo $inp3 >> $inputfile

tail -f $outputfile &

while true
do
read str
if [[ $str = "quit" || $str = "exit" ]]
then echo $str >> $inputfile ; exit
else echo $str >> $inputfile
fi
done
#==================================


参数文件, 输入在出现正常提示符之前需要输入的所有内容, 用空格分开, 以ip地址或者hostname开头
#=====param============
localhost root password

#=====================
头像
Nile
帖子: 990
注册时间: 2006-07-15 11:20
来自: 枫叶刀市

#12

帖子 Nile » 2007-04-29 15:21

Woo!标准的好东东!收下了!

虽然看不太懂,但感觉因该可以解决问题,五一好好钻研shell编程,争取搞定之!

(以下省略千余字的感谢之辞...)
Thinkpad T400
回复