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

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

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

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

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

zsh

zshは、UNIX系OSのシェルの1つです。 cshやksn系のコマンドライン編集機能も実装されたシェルです。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

Q&A

解決済

1回答

720閲覧

.zshrc内にexport文が複数ある場合に「zsh: command not found: flutter」となる

Risney

総合スコア148

bash

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

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

zsh

zshは、UNIX系OSのシェルの1つです。 cshやksn系のコマンドライン編集機能も実装されたシェルです。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

0グッド

0クリップ

投稿2023/09/24 01:26

編集2023/09/24 01:27

実現したいこと

MacでFlutter環境構築時にタイトルの通りのエラーになりました。

その後エラー自体は解決したのですが、
自分の修正した内容にどんな意味があるか知りたいです。

修正内容

2行のexportがあるとエラーになるという記事を見かけたので、ChatGPTにパスをまとめて!と頼んでみました。

zsh

1export HOMEBREW_CASK_OPTS="--appdir=/Applications" 2export PATH=”/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Applications/flutter/bin”

そうしたらexportは2行のままですがPATHの最後に「:$PATH」が追加され、flutterコマンドが使用できるようになりました。

zsh

1export HOMEBREW_CASK_OPTS="--appdir=/Applications" 2export PATH=”/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Applications/flutter/bin:$PATH”

:$PATHとは

環境変数の値をいれるものとググったら出てきまして、
以前自分が質問させていただいた時に「複数export文があると後のexport文に上書きしてしまうから、2行目移行のexportで:$PATHに変数としていれると良い。」と伺いました

以下のようになっている場合はわかるのですが、

zsh

1export PATH=”” 2export PATH=””

今回はPATHは2行目のみですが、当てはまる話でしょうか?

zsh

1export HOMEBREW_CASK_OPTS="--appdir=/Applications" 2export PATH=""

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

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

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

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

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

hoshi-takanori

2023/09/24 01:51

ダブルクオートが全角になってたからでは…。
Risney

2023/09/24 04:07

凡ミス、、 ご指摘ありがとうございます。
guest

回答1

0

ベストアンサー

exportは本質ではなくて、代入すれば上書きされるという当たり前のことです。
PATHは、ログイン時に初期値(※)が設定され、その後、Zshだと/etc/zshenvその他いくつかの設定ファイルが順番に実行される過程でおそらく何度も上書きされます。
上記をどのファイルに書いたか明記されてませんが、ホームディレクトリーのZsh設定ファイルの何処に書いてもそのうち順番が回ってきて実行されますが、その時点では何らかの値がPATHに入っています。
自分のファイルに複数回書こうが1回しか書いてなかろうが上書きに違いないです。

PATHはコマンドの検索場所のディレクトリー一覧なので、普通は、前(優先度高)か後ろ(優先度低)に追記するわけで、PATH=$PATH:追加場所またはPATH=追加場所:$PATHと直前の値を参照します。

もちろん$PATHを使わず、必要な場所をもれなく列挙して代入しても良いです。

また、コメントで指摘のように引用符が全角になっているので、投稿時のミスじゃなくて、実際の設定ファイルもそうであるなら、最初の検索場所は、/usr/local/binじゃなくて”/usr/local/binという全角文字を含んだおそらく存在しないディレクトリーなので、/usr/local/binにあるコマンドはnot foundですね。

修正後の行も引用符が全角のままなので、最初と最後のディレクトリーには全角文字がついて設定されていて、本来のディレクトリーにあるコマンドはnot foundです。修正してflutterが使えるようになったのは最初と最後以外の場所にあるからでしょう。

※:ログイン時の初期値はOSによって異なります。例えば/usr/bin:/binとか/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbinとか。

余談を書いておくと、exportは、その変数がシェル内のみで有効な変数じゃなくて、そのシェルから起動される子プロセスにも伝搬する環境変数であることを宣言するものです。
export A=123は宣言と代入を同時に行う書き方です。A=123 export Aと分けても良い。
1つの変数に対してのexport宣言は一度やれば、その後その変数がunsetされるか、そのシェルが終了するまで有効なので、export済みの変数の上書き時にexportを書いても書かなくても同じです。
PATH等いくつかの変数についてはあらかじめexportされた状態なので、PATHへの代入にexportを付けるのは機能的には無意味です。
(二重宣言をエラーにするとエラー多発なので、再宣言でもエラーにしないのでしょう)

投稿2023/09/24 03:28

otn

総合スコア86295

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

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

otn

2023/09/24 04:10

前の質問も見ましたが、.zshrc等のファイルに書かれた物はシェルスクリプトであり、そのまま実行されるだけだということが理解できていないでしょうか。 あるいは、シェルスクリプトを読み書きしたことが今まで無かったと言うことでしょうか。 .zshrc等は上述のように、普通のシェルスクリプトファイルなので、読み書きにはシェルスクリプトの知識が必要です。
Risney

2023/09/24 04:13

otn様 ご回答ありがとうございます。 そもそもただの半角全角の凡ミスで、最後にflutterへのパスがあり、その後に「:$PATH」をくっついたのでflutterのみPATHが通っている状態ということですね。。 ただこれをきっかけに詳しく知れたのでよかったです! わかりやすいご回答ありがとうございました。 ベストアンサーにさせていただきます!
Risney

2023/09/24 04:14

hoshi-takanori様もご指摘ありがとうございました! いつもご回答頂いて助けられてます。 引き続きよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問