3

端末の最後の出力をグーグルで検索するbash関数を作成しようとして$_います。たとえば、何かを試して端末からエラーが発生した場合、エラーをコピーしてGoogleに貼り付けるのではなく、入力するだけでgoogle thatエラーがGoogleに表示されます。

また、Google ホームページとランダム Google 検索を開くこともサポートします。

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

4 に答える 4

5
  1. [ $foo == 'bar' ]、使用しないでください[ "$foo" = 'bar' ]または[[ "$foo" == 'bar' ]]
  2. 使わない[ $1 == '' ]、使う[ -z "$1" ]
  3. jm666が指摘したように、おそらくもっと強調する必要がありましたが、端末の最後の出力で$_なく、 「[s]実行された前のコマンドの最終引数に設定された特別な変数」であるため、スクリプトは実際にあなたが望むことを決してしません.

そうは言っても、スニペットを少しきれいに書き直すと、次のようになります。

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
于 2013-05-11T11:47:57.077 に答える
3

最後のコマンドの最後の引数は[.

何かを行う前に、最後の引数を順番に保存する必要があります。

function google() {
  local lastarg=$_
  if [ $1 == 'that' ]; then
    open /Applications/Google\ Chrome.app/ "http://www.google.com/search?q= $lastarg"
  ...
于 2013-05-11T07:11:17.987 に答える
3

まず、平均で(bashここを参照$_

the last argument of the last command

そのため、スクリプトで使用すると変更されます。たとえば、単純な関数

mytest() {
        if [ "$1" == 'that' ]
        then
                echo $_
        fi
}

印刷します

]

last argument of the last command(もし)は何ですか

2 番目に、URL を 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

URLに変更されます

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

「空」検索でクロムを開くか、上記のようにgoogle some weird search

3 番目open something something_otherに、 を使用する場合は、open両方を開こうとします。したがって、Chrome を開きたい場合は、引数を使用して-a applcationスイッチを使用する必要があります。ブラウザが Safari ではなく Chrome の場合defaultは、次の簡単な方法を使用できます。

 open "http://www.google.com/search?q=$gq";
于 2013-05-11T07:17:24.533 に答える
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」だけです。これにより、Google 検索で hello+world が検索され、上位 3 つの Google ヒットが返されます。

Grep に慣れていない人にとっては、-A は「一致が見つかった後の行」を意味し、-B は前を意味します。--color は、出力で「一致した」用語を強調表示します。

私は人生の多くを端末で過ごしているように見えるので、このコマンドは非常に便利だと思います。

于 2014-04-16T10:49:14.557 に答える