コマンドライン(tcsh)を使用してDuckDuckGoを取得する方法は?

コマンドライン(tcsh)を使用してDuckDuckGoを取得する方法は?

ウェブ上のものを見つけるときによく使う簡単な機能があります。

魚から

function ddg
    set URL "https://duckduckgo.com/?q=$(echo "$argv" | tr " " "+")"
    python3 -m webbrowser -t "$URL"
end

ZSHから

ddg() {
    URL="https://duckduckgo.com/?q=$(echo "$*" | tr " " "+")"
    python3 -m webbrowser -t "$URL"
}

さて、私はtcshを使うべきですが、どのように翻訳するのかわかりません。

evalこれは簡単ですが、これが必要かどうか、パラメータにアクセスする方法などがわかりません。

試しましたが、alias ddg "python3 -m webbrowser -t \"https://duckduckgo.com/?q$(echo '\!*' | tr ' ' '+')\""次のエラーが発生します。

Illegal variable name.

答え1

tcshには機能がありません。

多くの場合、いくつかの問題を解決できます。たとえば、別のtcshスクリプトを作成し、ここに介入したいパラメータを渡すことができます。

しかし、正直なところ、あなたはすでにすべてのコンピュータで利用可能なスクリプトソルバーPythonを使用しています。だから簡単なPythonスクリプトを書いてください!また、URLパラメータに渡すことをURLエスケープする必要があることに注意してください。ここではそうしません。

また、関数はすべてのスペースをプラス記号に変換します。これは望むものではありません。と入力すると、ddg cat "toy company"おもちゃと会社の間のスペースをプラス記号に変換したくありません。また、シェル関数は空白を含む引数文字列を引用しないため、意図したとおりにcat+toy+company実際に検索していますcat+"toy company"。違いを作る!この問題を解決しましょう。

#!/usr/bin/env python3
# Save this file somewhere in your $PATH, or make an `alias` that calls it explicitly
# `chmod 755 filename` will make this file executable

import webbrowser
import sys
from urllib.parse import urlencode

if len(sys.argv) < 2:
  """
  no arguments given, just open the DDG homepage
  """
  webbrowser.open("https://duckduckgo.com")
  sys.exit(0)

# enclose arguments that you specifically passed as single argument
# containing space characters with quotation marks
quoted = (f'"{value}"' if " " in value else value for value in sys.argv[1:])
argument = "+".join(quoted)
url = urlencode(f"https://duckduckgo.com/?q{argument}")
webbrowser.open(url)

関連情報