文書URLs.txt
:
$ cat URLs.txt
www.google.com >/path/to/save
これは私のスクリプトです。
dl_url() {
while true; do
while IFS='>' read -r website_url gallery_dir; do
echo "Downloading $website_url"
echo "To $gallery_dir"
sleep 1
mkdir -p ./update_photo_temp/
wget --quiet $website_url -P ./update_photo_temp/
## If $website_url = to function then run function
for i in $website_url; do
echo $i | awk -F '/.' '{print $2}' | xargs
done
done < ./URLs.txt
done
}
google.com() {
while true; do
echo "blah blah blah"
done
}
google.comがgoogle.com機能を起動するのと同じように、URLに依存する他の機能を起動する必要がある正しい機能を開始せずにURLホスト名のみを印刷します。どのように変更しますか?
ベストアンサー1
私が理解するようにタイトルの質問に答えるには、入力行を読み、シェル関数名と同じ行ごとに関数を実行します。
declare -f func
以下を使用して定義されていることを確認できますfunc
。
#!/bin/bash
foo() { echo foofoo; }
bar() { echo barbar; }
while read funcname; do
if declare -f "$funcname" &> /dev/null; then
"$funcname"
fi
done
コードで次の点に注意してください。
IFS='>' read -r website_url gallery_dir
>
ここで設定した内容website_url
にはスペースは含まれていませんので、inの前にスペースを残してください。代わりにこれをIFS
使用できますIFS='> ' read ...
。
for i in $website_url; do
echo $i | awk -F '/.' '{print $2}' | xargs
done
これが何をすべきかわかりません。for i in $website_url
変数の値を分割してグローバル化し、i
その値を繰り返します。xargs
パイプの端にあるのは、入力で得たすべてをエコーします。これらのどれも機能を実行しません。また、awk
フィールド区切り文字は/.
スラッシュの後にランダムな文字が続くものと一致するため、入力がたとえばの場合、foo/bar
結果出力はになりますar
。