相关疑难解决方法(0)

如何为输出添加行号,提示换行,然后根据输入进行操作?

我写了一个像这样的shell脚本:

#! /bin/sh
...
ls | grep "android"
...
Run Code Online (Sandbox Code Playgroud)

输出是:

android1 
android2
xx_android
...
Run Code Online (Sandbox Code Playgroud)

我想在每个文件中添加一个数字,如下所示:

    1 android1 
    2 android2
    3 XX_android
    ...
    please choose your dir number:
Run Code Online (Sandbox Code Playgroud)

然后等待用户输入行号x,脚本读回行号然后处理相应的目录.我们怎么能在shell中做到这一点?谢谢 !

linux shell

61
推荐指数
4
解决办法
4万
查看次数

如何将初始输入传递到进程中,然后进行交互?

我希望能够在启动交互式进程时注入初始命令,以便我可以执行以下操作:

echo "initial command" | INSERT_MAGIC_HERE some_tool

tool> initial command 

[result of initial command] 

tool> [now I type an interactive command]
Run Code Online (Sandbox Code Playgroud)

什么行不通:

  • 只是管道输入初始命令不起作用,因为这导致stdin没有连接到终端

  • 写入/ dev/pts/[number]将输出发送到终端,而不是输入到进程,就像它来自终端一样

什么会有缺点:

  • 创建一个分叉子命令,写入stdin,然后从自己的stdin转发所有内容.下行 - 终端控制事物(如线与字符模式)不起作用.也许我可以用代理伪终端做些什么?

  • 使用命令行选项创建xterm的修改版本(我正在为此任务启动一个),以在遇到所需的提示字符串后注入其他命令.丑陋.

  • 制作我正在尝试运行的工具的修改版本,以便它在命令行上接受初始命令.打破标准安装.

(顺便提一下,当前感兴趣的工具是android的adb shell - 我想在手机上打开一个交互式shell,自动运行命令,然后进行交互式会话)

unix linux pipe

38
推荐指数
2
解决办法
2万
查看次数

在bash中多次读取stdin

我试图在shell脚本中多次读取stdin,没有运气.目的是首先读取文件列表(从stdin管道读取),然后再读两次以交互式获取两个字符串.(我要做的是阅读要附加在电子邮件中的文件列表,然后是主题,最后是电子邮件正文).

到目前为止我有这个:

photos=($(< /dev/stdin))

echo "Enter message subject"
subject=$(< /dev/stdin)

echo "Enter message body"
body=$(< /dev/stdin)
Run Code Online (Sandbox Code Playgroud)

(加上错误检查代码我省略了succintness)

然而,这可能是因为第二次和第三次重定向得到EOF而得到一个空的主体和身体.

我一直试图关闭并重新打开stdin与<& - 和东西,但它似乎没有那样工作.

我甚至尝试使用分隔符作为文件列表,使用"while; read line"循环并在检测到分隔符时中断循环.但那也不起作用(??).

任何想法如何建立这样的东西?

bash stdin

7
推荐指数
2
解决办法
8231
查看次数

标签 统计

linux ×2

bash ×1

pipe ×1

shell ×1

stdin ×1

unix ×1