【Linux】如何将一个命令要求的输入通过管道传递?
如何将一个命令要求的输入通过管道传递?
问题
直接来举个例子说明问题吧,假设我有一个 test.sh 脚本,运行它会出现下面的输出
bash
1 | > sh test.sh |
这个脚本希望我们确认当前的操作,输入 y 表示同意,输入 n 或者其他字符都表示退出。
此时如果是人工正常执行,我们输入 y 就可以继续往后了。但如果我们是使用某些 cicd 工具(比如 jenkins)去自动化执行这个脚本呢?此时就没有办法有用户去做这个输入的操作了。
但我们又想自动化运行 test.sh 脚本,咋办?
解决方案
解决方案就是使用 linux 下的命令行管道 |
,比如 test.sh 要求输入 y 来确认,我们就可以这样写
bash
1 | echo y | sh test.sh |
此时 y 会被自动当作 test.sh 脚本的输入,即跳过了要求用户输入来确认的步骤,会直接往后执行。
这个方式适用于很多命令行执行,不希望有用户输入导致阻塞等待的脚本。
还有一个常用的命令就是切换 linux 下的用户,默认情况下使用的命令是 sudo -u 用户 执行的命令
来以另外一个用户的身份执行某个命令,这个操作会要求我们输入目标用户的密码,此时可以用如下方式来替代,新增的 -S
选项代表 sudo -u
将从 stdin 里面提取用户密码。
bash
1 | echo 用户密码 | sudo -u 用户名 -S 需要执行的命令 |
可以使用 whami 命令来测试这个命令的效果,如果执行成功,whami 应该显示另外一个用户的名字,而不是当前执行该命令的用户。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 慕雪的寒舍!
评论
表情图片预览
0 条评论
- 最新
- 最热
- 最早
- 作者
关闭评论
通知中心
「此时无声胜有声」
Artalk ErrorTypeError: Failed to fetch,无法获取评论列表数据
点击重新获取 | 打开控制台
点击重新获取 | 打开控制台