gpt4 book ai didi

linux - 在已通过管道输入的命令中引用 stdout

转载 作者:太空狗 更新时间:2023-10-29 11:21:40 25 4
gpt4 key购买 nike

我想制作一个简单的 dmenu 命令来读取命令和名称的文件。然后获取名称并使用 dmenu 显示它们,然后获取 dmenu 的输出并再次使用该文件运行关联的命令。

我到了 dmenu 显示名称的地步,但我真的不知道从那里去哪里。学习 bash 对我来说是一项非常艰巨的任务,我真的不知道从哪里开始这个看似简单的脚本/命令。

这是文件:

Pushbullet
google-chrome-stable --app=https://www.pushbullet.com
Steam
steam
Chrome
google-chrome-stable
Libre Office
libreoffice
Transmission
transmission-qt
Audio Control Panel
sudo pavucontrol & bluberry

这是我目前的命令:

awk 'NR % 2 != 0' /home/rocco/programlist | dmenu | ??(grep -l "stdout" /home/rocco/programlist....)

我的想法是,我可以通过某种方式将应用程序名称通过管道传输到 grep 或 awk,然后获取行号,然后添加一个并将其通过管道传输到 sh。

谢谢

最佳答案

我没有使用 dmenu 的经验,但如果我了解它是如何正确工作的,那么这应该可以满足您的需求。将命令包装在 $(…) 中将输出作为变量返回,我们可以将其传递给另一个命令。

#!/bin/bash
plist="/home/rocco/programlist"
# pipe every second line to dmenu
selected=$(awk 'NR % 2 != 0' "$plist" | dmenu)
# search for the selected item, get the command after it
cmd=$(grep -A1 "$selected" "$plist" | tail -n 1)
# run the command
$cmd

值得一提的是您问题中的一个错误。 dmenu 发送到 stdout,或标准输出,但下一个程序将读取 stdin,或标准输入。在任何情况下,grep 都不能在标准输入上采用模式,这就是为什么我保存到一个变量而不是尝试将其通过管道传输到某个地方的原因。

关于linux - 在已通过管道输入的命令中引用 stdout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36191448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com