全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 874|回复: 5

[翻译] shell经过wget -O-管道给bash时while循环read出错

[复制链接]
发表于 2019-3-24 13:27:15 | 显示全部楼层 |阅读模式
本帖最后由 逸笙 于 2019-3-24 16:16 编辑

LOC大佬多。

  1. while [ -z "${user}" ]
  2. do
  3. read -p "Input your account:" user
  4. done
  5. while [ -z "${pwd}" ]
  6. do
  7. read -p "Input your password:" pwd
  8. done
复制代码


简单的几句,如果本地运行不会有问题,wget到本地后再bash也没有问题。

但如果打算wget -O- xxx.com/aaa.sh | bash,就有问题了,
首先是没有停下来输入user跟pwd,
然后提示:line 11: syntax error near unexpected token `do'
这个11行是第2个do,我echo user出来,它居然是
while [ -z "${pwd}" ]
do
done
这样三行,百度了半天,好像while是自己的小环境,给|一下后就会出错。

那怎么实现呢,我想用户不输入user就继续提示输入,然后还想可以直接wget -O- 来 | bash这样。
==================
read -p "Input your password:" pwd < /dev/tty
感谢dupit8
发表于 2019-3-24 15:54:54 | 显示全部楼层
本帖最后由 dupit8 于 2019-3-24 16:01 编辑

当然出错了,因为 read 的缺省就是标准输入,而你已经把标准输入重定向到wget去了。
你可以把命令行写成
bash <(wget -O http://xxx.com/xx.sh)
而不是
wget -O - http://xxx.com/xx.sh|bash

或者
read -p "Input your password:" pwd < /dev/tty

点评

感谢!!!!!!!!!!  发表于 2019-3-24 16:10
发表于 2019-3-24 14:06:15 | 显示全部楼层
小白不懂,顶一下
发表于 2019-3-24 15:55:18 | 显示全部楼层
wget xxx.com/aaa.sh && bash aaa.sh && rm aaa.sh
看不懂为啥要用管道, 为了一行写几个命令? 那用&&也行吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-4-25 22:57 , Processed in 0.082497 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表