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