- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:make の$(shell ) コマンドが動かない)
makeコマンドの$(shell)が正常に動作しない原因とは?
このQ&Aのポイント
- makeコマンドの$(shell)が正常に動作しない原因とは何でしょうか?環境によって実行されたりエラーになったりする現象について説明します。
- 質問文章では、makeファイルに記述されたshellコマンドの一部である$(shell)が正常に動作しない現象について詳しく説明します。また、エラーメッセージの内容や解決策についても説明します。
- 質問文章での問題は、makeコマンドの$(shell)が実行できないという現象です。この原因としては、環境変数やmake、perlのパスの問題が考えられます。詳しく解説します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
エラーメッセージは Perl が出力しているものでしょう。 make が $_ を /usr/bin/make 等に展開していませんか? 「print $_」の箇所が「print /usr/bin/make」に展開され Perl が Bareword エラーを吐いているというわけです。 make のビルトイン変数を確認してみて下さい。 % make -p | egrep ^_ 解決方法ですが、「print $_」は「print」と省略表記できます。 または「$_」を「$$_」とエスケープする方法もあります。 ただし、正しく動作している環境で問題が生じるかもしれません。
その他の回答 (2)
- entree
- ベストアンサー率55% (405/735)
回答No.3
これでダメですか?(printの後ろの$を$$に修正) LIST = $(shell cat $(FILE) | perl -ne 'next if (m/^\#/); print $$_;' | sed -n "s/\(.*\) \(.*\)/\1_\2/p" ) そもそも、以下で問題ないように思います。 LIST = $(shell sed -ne '/^\#/s/\(.*\) \(.*\)/\1_\2/p' $(FILE) )
質問者
お礼
ありがとうございます(ky072さんと同じところの誤りをご指摘いただきました)。 sed だけでできる、という件、確かにそうかも知れません。 sed はきまったことしか(僕は)できないので、無駄に複雑になっていました(書いて頂いたsed コマンドの意味は理解できました。) 逆にprlをつかうなら全部perlでもよかったのでした。 ありがとうございます。
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.1
後ろ向きだけど sed だけでやればいいような気がする....
お礼
お礼が遅くなりましたがどうもありがとうございました(一回入力したのですが、入っていなかったようでした)。 この方法でいかなる環境でも動作しました。 # 逆にどうして正しく動作していたのかが???なのですが。。。