質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

解決済

2回答

4701閲覧

shスクリプトファイル?内で wgetを行うとエラーになってしまう問題

jantyran

総合スコア14

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

0クリップ

投稿2018/08/11 18:00

編集2018/08/11 18:47

画像を自動的に取得するプログラムを描こうとしているのですが、wgetの挙動でつまづいてしまいました。

shellスクリプトファイル?()内に wget コマンドの記載をしたのですが、どうしても、エラーが出てしまい取得することができません。

1 #!/bin/sh 2 3 keyword=$1 4 5 if [ -z $keyword ] 6 then 7 echo "put keyword like this" 8 echo "$ $0 \"ペンギン 空\" " 9 exit 10 fi 11 12 echo ${keyword} 13 keyword=`echo $keyword | nkf -wMQ | tr = %` 14 echo $keyword 15 url="\"http://www.heso.blue/?text\=${keyword}\&page\=1\"" 16 #url=`echo \'$url\'` 17 echo $url 18 wget -nd -r -l 2 -H -P ./get-images/ -A jpeg,jpg,bmp,gif,png $url
#結果 (引数に "空" を渡した場合) 空 %E7%A9%BA "http://www.heso.blue/?text=%E7%A9%BA&page=1" "http://www.heso.blue/?text=%E7%A9%BA&page=1": Scheme missing.

スクリプトないでエンコードさせているのは、日本語表記ではスクリプト内から通らなくなってしまうのかと思ってしたのですが、あまり効果はなかったみたいです。

下記のように、いくつか記述を変えて試してみたのですが、同じようにダメでした。

wget -nd -r -l 2 -H -P ./images/ -A jpeg,jpg,bmp,gif,png "http://www.heso.blue/" #or エスケープ処理して書いてもだめ。 wget -nd -r -l 2 -H -P ./images/ -A jpeg,jpg,bmp,gif,png ¥"http://www.heso.blue/¥" #or どこかでみた二重エスケープも試したけどだめ。 wget -nd -r -l 2 -H -P ./images/ -A jpeg,jpg,bmp,gif,png "¥"http://www.heso.blue/¥"" #or urlがそのまま書かれたものでさえも動かない。 wget -nd -r -l 2 -H -P ./images/ -A jpeg,jpg,bmp,gif,png "http://www.heso.blue/?text=空&page=1"

スクリプト内に記載しても動かないのですが、普通にコマンドとして打つと正常に取得できます。

#コマンドで下記を直接叩くと正常に動く wget -nd -r -l 2 -H -P ./images/ -A jpeg,jpg,bmp,gif,png "http://www.heso.blue/?text=空&page=1"

どうしてスクリプト内に記載すると動かなくなってしまうのでしょうか。
どなたか助力お願いします。

また、参考に下記のサイトをみましたが、解決には至りませんでした。
http://capslook.hatenablog.com/entry/2015/07/12/235014
http://www.garunimo.com/program/linux/linux52.php

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

最初のファイルの送り先をshにしていたのが問題でした。
wgetをインストールして、扱えるようにしているのはbashに設定していた環境だったので、bashに送らないと使えないようでした。

直接コマンドを叩くとbashがコマンドを識別して動いてくれましたが、
このままのスクリプトファイルだとbashではなく普通の?shellに送られるものの、wgetがshellでは確認できないので動作しないということです。

なので、下記のように記述を変更することで、解決しました。

##!/bin/sh #↓ #!/bin/bash

投稿2018/08/21 11:45

jantyran

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

変数に引用符まで含まれているので駄目です。

Bash

1url=http://www.heso.blue/?text=${keyword}\&page=1 2echo $url 3wget -nd -r -l 2 -H -P ./images/ -A jpeg,jpg,bmp,gif,png $url

が正解。

普通は、1文字ずつエスケープせず、引用符で囲みます。

Bash

1url="http://www.heso.blue/?text=${keyword}&page=1" 2echo $url 3wget -nd -r -l 2 -H -P ./images/ -A jpeg,jpg,bmp,gif,png $url

投稿2018/08/11 18:27

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jantyran

2018/08/11 18:37

解答ありがとうございます。 ``` 15 url="http://www.heso.blue/?text=${keyword}&page=1" 16 echo $url 17 wget -nd -r -l 2 -H -P ./images/ -A jpeg,jpg,bmp,gif,png $url ``` 15行目からを上記のように修正したのですが、下記のようにエラーが出てしまいました。 urlに引用符をつけると、"Incomplete or invalid multibyte sequence encountered"というエラーだけでも消えるのでつけていました。 15行目がこちらでも同じエラーが出てしまいます。 'url=http://www.heso.blue/?text=${keyword}\&page=1' ``` #結果 空 %E7%A9%BA http://www.heso.blue/?text=%E7%A9%BA&page=1 Incomplete or invalid multibyte sequence encountered Incomplete or invalid multibyte sequence encountered Incomplete or invalid multibyte sequence encountered --2018-08-11 15:33:38-- http://www.heso.blue/?text=%E7%A9%BA&page=1 Resolving www.heso.blue (www.heso.blue)... failed: nodename nor servname provided, or not known. wget: unable to resolve host address 'www.heso.blue' ```
jantyran

2018/08/11 18:39

すいません、表記の方法がそもそも違うので、これらのエラーが出る以前のところでエラーが出ていたということですね。 ありがとうございます。
otn

2018/08/11 19:00

> wget: unable to resolve host address 'www.heso.blue' なので、ネットワークの問題です。 > Incomplete or invalid multibyte sequence encountered は警告なので、サイトの文字コードと合っていればこれが出ても正常に取得できると思います。
jantyran

2018/08/12 02:05 編集

shファイルないでwgetをすると、ネットワークの問題が発生してしまうのは何故なのでしょうか。 ```: getImages2.sh #!/bin/sh wget -nd -r -l 2 -H -P ./images/ -A jpeg,jpg,bmp,gif,png "http://www.heso.blue/?text=空&page=1" ``` 2行目のコマンドは直接叩くと正常に動作しても、 上記のみが記載されたsh ファイルでも下記のエラーが出てしまうのがよくわからないです。  wget: unable to resolve host address 'www.heso.blue'
otn

2018/08/12 11:45

まだなにか書き漏れている状況があるのだと思いますが、それが分からないことにはこちらでは何とも。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問