我编写了一个shell脚本,要求从标准输入中输入一些用户名和密码。 输入用户名和密码后,输出取决于脚本中传递的参数。
说我的脚本名称是 XYZ.ksh。
现在我的问题是这些脚本的用户希望使用想要使用此脚本与其他shell命令结合使用,例如 grep,less,more,wc等。
通常是的,他们可以使用
XYZ.ksh | grep abc
但在我的情况下,由于XYZ提示输入用户名和密码,我们无法使用“|”在那之前。它永远阻止。
我只是想知道如何实现功能。
我尝试了什么 我尝试从用户输入“更多命令”,用户输入“| grep abc”之类的内容 但是当我在我的脚本中使用此输入时,它不起作用。
答案 0 :(得分:0)
像这样使用<<<
:
XYZ.ksh <<< "your inputs" | grep abc
答案 1 :(得分:0)
在您的脚本中,您可以测试stdout是否连接到终端:
if [[ -t 1 ]]
这样,如果输出没有进入控制台,你可以抑制提示。 或者,使用“更多命令”解决方案,运行连接到命名管道的命令。
答案 2 :(得分:0)
这类问题通常有多种解决方案,但没有一种是完美的:
passwd
,smbpasswd
ps -ef
来查看命令行。这由mysql
,htpasswd
,sqlplus
,... mysql
sqlplus
,VirtualBox,某些Linux发行版上的游戏使用的...... 我的首选解决方案将是最后一个,因为系统肯定比我在安全方面可编写的任何程序都要好。
如果密码用于登录其他服务,那么我可能会去找包含密码的私人文件。
答案 3 :(得分:0)
一种不太理想的可能性是将提示显示为stderr
而不是stdout
。
echo -n "Username:" >/dev/stderr
更好的解决方案是检查shell的stdin
。如果它是终端,则打开它进行写入并重定向到该文件。不幸的是,我不确定如何在bash或ksh中这样做;或许类似
echo -n "Username:" >/dev/tty
答案 4 :(得分:0)
您可以使用(我假设您正在使用read
)
(
read -p "user:" USER
read -p "pass:" PASS
) < /dev/tty > /dev/tty
你可以运行
$ cmd | XYZ.ksh
但是,我同意其他答案:不要求用户和密码,并为脚本提供正确的权限以允许访问。