ウェブ上のものを見つけるときによく使う簡単な機能があります。
魚から
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)