【发布时间】:2012-12-06 15:41:30
【问题描述】:
这个脚本应该接受一组搜索词并返回一个格式化的 URL 来搜索 google。
$ ./google_search.sh albert einstein
https://www.google.com/search?q=albert+einstein
这样做很好,所以我决定添加一个选项来搜索特定站点,或者忽略该站点,使用 -s 或 -S 标志。
$ ./google_search.sh -s wikipedia.org albert einstein
https://www.google.com/search?q=albert+einstein+site%3Awikipedia.org
这在您第一次运行脚本时有效,但在随后的每次尝试中都会失败。
$ ./google_search.sh -s wikipedia.org albert einstein
https://www.google.com/search?q=albert+einstein
$ ./google_search.sh -s wikipedia.org albert einstein
https://www.google.com/search?q=albert+einstein
打开一个新的终端窗口或重新启动终端都可以清除此问题并允许在失败之前再尝试一次。
脚本:
#!/bin/bash
# original source of concatenate_args function by Tyilo:
# http://stackoverflow.com/questions/9354847/concatenate-inputs-in-bash-script
function concatenate_args
{
string=""
ignorenext=0
for a in "$@" # Loop over arguments
do
if [[ "${a:0:1}" != "-" && $ignorenext = 0 ]] # Ignore flags (first character is -)
then
if [[ "$string" != "" ]]
then
string+="+" # Delimeter
fi
string+="$a"
elif [[ $ignorenext = 1 ]]
then
ignorenext=0
else
ignorenext=1
fi
done
echo "$string"
}
qry="$(concatenate_args "$@")"
glink="https://www.google.com/search?q="
site=""
while getopts :s:S: opt; do
case $opt in
s) site="+site%3A$OPTARG" ;;
S) site="+-site%3A$OPTARG" ;;
esac
done
url=$glink$qry$site
echo $url
# open -a Firefox $url
需要进行哪些更改才能使此脚本更可靠?
【问题讨论】:
-
将
-xv选项添加到 shebang 行以查看发生了什么。 -
这似乎没有任何作用。我正在尝试
#!/bin/bash -xv。 -
这表现得好像您正在采购脚本而不是执行它。您确定您使用的是
./google_search.sh而不是. google_search.sh?试试bash google_search.sh。 -
或者,您正在编辑脚本的不同副本。
-
如果脚本是可执行的,只需删除点并使用
alias google=/Tools/google_search.sh。如果没有,请使用alias google='bash /Tools/google_search.sh'