웹에서 물건을 찾을 때 자주 사용하는 간단한 기능이 있습니다.
물고기에서
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)