Bash功能,用于通过Chrome搜索Google以获取终端的最后输出

时间:2013-05-11 06:31:06

标签: bash

我正在尝试制作一个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。

4 个答案:

答案 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或简单

的查询打开Chrome
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)

  1. 请勿使用[ $foo == 'bar' ],使用[ "$foo" = 'bar' ][[ "$foo" == 'bar' ]]
  2. 请勿使用[ $1 == '' ],请使用[ -z "$1" ]
  3. 正如jm666指出的那样,但也许应该强调更多,$_ 终端上的最后一个输出,它是“[s] pecial变量设置为上一个命令的最后一个参数执行“,所以你的脚本实际上永远不会做你想要的。
  4. 所有这一切,对你的代码片段进行略微清晰的重写可能如下所示:

    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;输出中的术语。

由于我似乎在终端上度过了很多生命,我发现这个命令非常有用。