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

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

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

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

Q&A

解決済

4回答

1859閲覧

$()内でのpipeについて

IsaoWatanabe

総合スコア17

bash

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

0グッド

0クリップ

投稿2017/02/16 13:45

編集2017/02/16 22:22

###前提・実現したいこと
シェルスクリプト内でコマンドを実行し、変数に渡したいです。
パイプの結果を受け取りたいのですが、実行されません。

###発生している問題・エラーメッセージ

パイプしたコマンドが実行されない

###該当のソースコード

bash

1例えばですが、 2Test=$( curl "http://**” | jq ・・・)

とすると、実行されないです。

###試したこと
bash -xで実行したところ、 | で改行されているようです。

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

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

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

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

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

guest

回答4

0

私のプログラムミスだったようで、書き直したら通りました。
ご迷惑をおかけいたしました。

投稿2017/03/23 12:36

IsaoWatanabe

総合スコア17

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

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

moonphase

2017/03/24 00:58

どのようなミスだったか参考になるよう記載おねがいできますか。
guest

0

右側のダブルクォーテーションが別のコードになってます。
それにより、"が閉じられていないので何も実行されないのではないでしょうか。

Test=$( curl "http://**” | jq ・・・)

ではなく

Test=$( curl "http://**" | jq ・・・)

です。

投稿2017/02/16 22:53

moonphase

総合スコア6621

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

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

0

ベストアンサー

$()コマンド置換になるわけですが、jsonデータは実行可能なコマンドですか?
それとも単なるテキスト?

|パイプライン)は前段で実行したコマンドの標準出力を後続のコマンドに渡すものです。
前段でなにも標準出力されなければ、後段にはなにも渡されません。

jsonデータが実行可能なスクリプトではなく、単に" "で括ったテキストデータで有れば、なにも出ないのは仕方ないです。
以下を実行してみると分かるかと思います。

bash

1$ "test" ←単にテキストを" "でくくっただけのもの 2$ ←標準出力どころか、エラーさえ出力されない

やりたいことは下記のような事では?

bash

1$ test=$( echo "jsonデータ" | jq . )

投稿2017/02/16 18:47

kanbeworks

総合スコア829

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

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

IsaoWatanabe

2017/02/16 22:21

大変失礼いたしました。ご指摘の通りです。ソースコードを修正しました。 それで、やりたいことはご指摘の通りですが、これって普通に通りますでしょうか。
kanbeworks

2017/02/16 23:31 編集

(curlを使うつもりならなぜ先にそれを書かない…) $()の中にコマンドをいきなり入れようとする前に、まずコマンドひとつひとつ実行してみて、書き方や結果が正しいか確認してからの方がいいですよ。 1. curlを試してみる 2. curlの結果をパイプでjqに食わせてみる 3. 上の2番の内容を$()に入れてみる いきなり最終結果を求めるのではなく、こつこつと小さい単位で確認をして進めるべきです。 それと質問内容が変わる場合は、「ごっそり書き換え」ではなくなるべく「追記」にして欲しいです。 変更前についた回答との整合性がとれなくなりますし、あとから回答される方も経緯を把握するためにいちいち修正履歴を追う羽目になる場合もあります。
guest

0

2箇所、気になる点があります。

まず一つ目は「$test=」です。「test=」の間違いではないでしょうか。

次に二つ目は「jsonデータ」です。

bash

1$ cat $(which '**jsonデータ**')

の実行結果と、

bash

1$ ls -l $(which '**jsonデータ**')

の実行結果を示して頂けませんか?

投稿2017/02/16 15:14

編集2017/02/16 15:17
....

総合スコア102

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

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

IsaoWatanabe

2017/02/16 15:55

失礼いたしました。$test ではなくtestです。 また、**jsonデータ** は 部分強調したかったのですが うまくいかなかったようです。 単に[jsonデータ]という意味です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問