我正在尝试制作一个bash函数,它将谷歌最后输出终端$_
给我。例如,当我尝试某些内容并且我从终端收到错误,而不是在谷歌中复制并粘贴错误时,我只需输入google that
,它就会为我发错误。
它还支持打开谷歌主页和随机谷歌搜索。
function google() {
if [ $1 == 'that' ]
then
open /Applications/Google\ Chrome.app/ "http://www.google.com/search?q= $_";
elif [ $1 == '' ]
then
open /Applications/Google\ Chrome.app/ "http://www.google.com"
else
open /Applications/Google\ Chrome.app/ "http://www.google.com/search?q= $@";
fi
}
当我输入google that
时,我会获得[
的搜索结果。我不明白为什么它不起作用?
我在OSX 10上使用Chrome。
答案 0 :(得分:3)
因为最后一个命令的最后一个参数是[
。
在执行任何操作之前,您必须按顺序存储最后一个参数:
function google() {
local lastarg=$_
if [ $1 == 'that' ]; then
open /Applications/Google\ Chrome.app/ "http://www.google.com/search?q= $lastarg"
...
答案 1 :(得分:3)
首先,bash
$_
均值(see here)
the last argument of the last command
因此在脚本中使用它时会发生变化。例如简单的函数
mytest() {
if [ "$1" == 'that' ]
then
echo $_
fi
}
将打印
]
什么是last argument of the last command
(if)
第二次,直接将网址添加到Google中,作为基本最小值,您需要将空格更改为+
。你不应该在=
和google's query
之间留出空格你的脚本可以很简单:
google() {
gq=$(sed 's/ /+/g' <<<"$*")
open -a /Applications/Google\ Chrome.app "http://www.google.com/search?q=$gq";
}
sed
行将空格更改为+
,所以命令
google some weird search
将更改为网址
http://www.google.com/search?q=some+weird+search
在您source
上面的脚本之后,或者将它放入〜/ .profile之后,您可以将它用作:
google $_ #instead of the "that" is shorter anyway :)
使用last argument of the last command
或简单
google
使用“空”搜索打开chrome,或者如上所述google some weird search
第三次,如果您使用open something something_other
,则open
会尝试打开这两项内容。因此,如果您想要打开Chrome,那么您应该使用-a applcation
开关。如果您的default
浏览器是Chrome而不是Safari,则可以使用简单的:
open "http://www.google.com/search?q=$gq";
答案 2 :(得分:3)
[ $foo == 'bar' ]
,使用[ "$foo" = 'bar' ]
或[[ "$foo" == 'bar' ]]
[ $1 == '' ]
,请使用[ -z "$1" ]
$_
不终端上的最后一个输出,它是“[s] pecial变量设置为上一个命令的最后一个参数执行“,所以你的脚本实际上永远不会做你想要的。所有这一切,对你的代码片段进行略微清晰的重写可能如下所示:
google()
{
local s="$_"
local query=
case "$1" in
'') ;;
that) query="search?q=${s//[[:space:]]/+}" ;;
*) s="$*"; query="search?q=${s//[[:space:]]/+}" ;;
esac
echo open /Applications/Google\ Chrome.app/ "http://www.google.com/${query}"
}
示例运行:
$ echo "foo bar quux"
foo bar quux
$ google that
open /Applications/Google Chrome.app/ http://www.google.com/search?q=foo+bar+quux
$ google
open /Applications/Google Chrome.app/ http://www.google.com/
$ google foo bar quux
open /Applications/Google Chrome.app/ http://www.google.com/search?q=foo+bar+quux
答案 3 :(得分:1)
对于我的方法,我改为使用了html2text的组合(通过很多东西可以使用,我使用的是HomeBrew),Curl和Grep 然后我在我的BashProfile中创建了以下函数。
goo() { ARGS='' if [ "x$1" != "x" ]; then for arg in $* do ARGS="$ARGS $arg" done else read -p "what do you want to search for: " ARGS fi ARGS=$(echo $ARGS | sed -e 's/\ /+/g') printf "\nsearching for the following term: $ARGS \n\n" curl -A Chrome http://www.google.com/search?q=$ARGS | html2text | grep ' 1\. \| 2\. \| 3\. ' -A 4 -B1 --color }
当我在终端时,我需要输入的是“goo hello world&#39;这将在谷歌搜索中搜索hello + world,返回前三个谷歌点击。
对于那些不熟悉Grep的人来说,-A意味着在比赛结束后排队&#39;和-B表示之前。 --color将突出显示匹配的&#39;输出中的术语。
由于我似乎在终端上度过了很多生命,我发现这个命令非常有用。