shell 通配符 *

藤虎 发布于 2014/06/13 15:57
阅读 622
收藏 1

【华为云1024程序员节·向云而生】预约直播 抽14件华为电子产品礼包!>>>

代码是这样的:

#!/usr/bin/expect -f

set password 123456

spawn scp -rp * root@10.216.49.67:/data/

expect "root@10.216.49.67's password:"

send "$password\r"

set timeout 600

send "exit\r"

expect eof


问题是:我执行脚本:*:No such file directory

Killed by signal 1.


为什么*在脚本里面没有起到通配作用,而是被看成了文件夹?

加载中
1
YuKunYi
YuKunYi

在命令行里*是直接被bash解析成了多个路径的,比如你的命令是 ls *  ,实际上在ls在运行时得到的参数是当前目录下的所有文件名,而不是*,但你用expect那么里面的内容都是由expect来进行解析,所以这个*会被当成一个参数传递给scp程序...

帮你改了一下:

 #!/usr/bin/expect -f

set password 123456

spawn sh -c "scp -rp * root@10.216.49.67:/data/"

expect "root@10.216.49.67's password:"

send "$password\r"

set timeout 600

send "exit\r"

expect eof 



YuKunYi
YuKunYi
sh 是你系统的shell程序,默认是bash ,-c后面表示用bash执行后面的命令。和你用shell输入一样,这时候*就会被解析了。
藤虎
藤虎
sh -c 是?
返回顶部
顶部