Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有状态的命令行工具/bash脚本_Bash_Shell_Environment Variables - Fatal编程技术网

具有状态的命令行工具/bash脚本

具有状态的命令行工具/bash脚本,bash,shell,environment-variables,Bash,Shell,Environment Variables,我正在尝试编写一个简单的单文件shell脚本,用于谷歌搜索并输出前五个结果的标题: > lookup search "Stack Overflow" 100 results 1. Stack overflow www.stackoverflow.com (description) 2. ... 然后,用户应该能够输入: > lookup go 1 它将打开用户选择的命令行浏览器,以显示第一个结果 但是,这需要脚本“记住”最后一个命令的结果 最好的方法是什么?我应该将结果保存为

我正在尝试编写一个简单的单文件shell脚本,用于谷歌搜索并输出前五个结果的标题:

> lookup search "Stack Overflow"
100 results

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

2. ...
然后,用户应该能够输入:

> lookup go 1
它将打开用户选择的命令行浏览器,以显示第一个结果

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

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


中也存在类似的功能,但它是用python实现的,我可能最终不得不深入研究它,以找出它在哪里实现的;但是,我甚至不能完全确定该解决方案是否适用于我。

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

如果您能够在将数据写入文件之前确保数据是干净/安全的,那么您可以对其进行设置,以便在脚本中轻松获取这些值。如果您将它们保存在t.var中,您可能需要~/.your程序或类似的程序

$ 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

解析数据与恢复数据的易用性之间似乎存在一种折衷。以上只是一种方法。

如果打开两个终端,并在每个终端上运行不同的搜索,你会怎么做?@AdamBatkin我想不定义这种行为,但如果在一个终端上搜索不会影响另一个终端,那会(稍微)好一些。