【问题标题】:Command line tools/bash scripts with state带有状态的命令行工具/bash 脚本
【发布时间】:2013-02-22 19:00:05
【问题描述】:

我正在尝试编写一个简单的单文件 shell 脚本,它应该进行 google 搜索并输出前五个结果的标题:

> lookup search "Stack Overflow"
100 results

1. Stack overflow
www.stackoverflow.com
(description)

2. ...

那么用户应该可以进入:

> lookup go 1

它会打开用户选择的命令行浏览器来显示第一个结果。

但是,这需要脚本“记住”最后一个命令的结果。

最好的方法是什么?我应该将结果保存为环境变量吗? (如果是这样,这将涉及获取脚本而不是在其自己的子外壳中调用它,这可能违反安全约定/不安全?我真的不知道)我应该将结果保存在临时文本文件中吗?

geeknote 中存在类似的功能,但它是在 python 中实现的,我可能不得不最终挖掘它以找出它在哪里执行此操作;但是,我什至不完全确定该解决方案是否适用于我。

【问题讨论】:

  • 如果您打开两个终端并在每个终端中运行不同的搜索,您会怎么做?
  • @AdamBatkin 我会保留未定义的行为,但如果在一个终端上搜索不会影响另一个终端,它会(略微)更好。

标签: bash shell environment-variables


【解决方案1】:

您可以使用点文件来保存信息,就像您的 shell 可以在登录时将 cmds 保存在 .history 文件中一样。

如果您愿意确保在将数据写入文件之前进行评估是干净/安全的,您可以对其进行设置,以便在脚本中轻松获取这些值。如果你将它们保存在 t.var 中,你可能想要 ~/.yourprogram 或类似的东西

$ cat t.var 
A=yahoo.com
B=google.com

然后您可以通过点读入它们:.

$ cat ./s.sh
#!/bin/bash
. t.var
echo ${A}

瞧:

$ bash ./s.sh 
yahoo.com

您只需要将名称映射到位置。

#!/bin/bash
. t.var
case "$1" in
 1 )
   echo $A;;
 2 )
   echo $B;;
esac

似乎在解析数据与恢复数据的易用性之间进行权衡。以上只是一种方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多