• 締切済み

PATHの修正について(初心者)

マックの環境をあるサイトを見ながら開発していたのですが、Apacheというwebサーバーをインストールしパスを通したところApacheの起動もできず、sudoやbrewなどのコマンドが使えなくなってしまいました。 その後、色々サイトを探してどうやらPATHを重複して通していることがわかりました。理解も浅はかな初心者がいろいろターミナルをいじっていたので、のっぴきならないくらいPATHが重複されてしまい、さらにunsetで重複したものを削除しようと試みたところ悪化をたどる一方で現在は何もコマンドができない状況です。 どうしたらもとに戻るのかどなたか解決の糸口を教えてください。よろしくお願いします。 参照URL ゼロから始めるMacintosh開発環境構築 http://engineer-intern.jp/archives/11563 現在のターミナルの状況... Last login: Mon Jun 23 19:09:16 on console -bash: unset: `PATH=/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:PATH': not a valid identifier -bash: unset: `PATH=/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:PATH': not a valid identifier -bash: unset: `PATH=/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:PATH': not a valid identifier

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

途中で送信してしまったので追記です。 unset PATH=/usr/local/sbin:$PATH と記述すると、$PATHがPATHの内容に展開されて unset PATH=/usr/local/sbin:/usr/local/sbin:...:PATH となり、エラーメッセージとも一致します。 シェルスクリプトの書き方は、参考書や参考サイトがありますので、基礎くらいは勉強しておくとよいでしょう。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

メッセージをよく読みましょう。 「PATH=/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:PATH」は有効な識別子(valid identifier)ではない というメッセージを 「unset」が出しています。 unset 変数名 で、「変数名」の変数を未定義にします。 その変数名として「PATH=/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:PATH」が指定されている、というのがエラーの理由です。 シェルスクリプトでは PATH が変数名 $PATH ${PATH} 等が、「変数の内容を展開したもの」です。 unset $PATH と書けば、 $PATHの内容が展開されて unset /usr/bin:/usr/sbin:....... (例)となり、 「 /usr/bin:/usr/sbin:....... を unsetする」という命令になります。 逆に PATH=/usr/local/sbin:PATH と書けば、このPATHは、「PATH」という文字列でしかありません。 「PATH=/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/sbin:PATH」 というのから予想すると ・最初に PATH=/usr/local/sbin:PATH としてしまい、それまでPATHに入っていたもの(/usr/bin等)を上書きしてしまった。 そのため、標準のコマンド(ls,cat等)が使えなくなった(PATHから探せなくなった) ・その後 PATH=/usr/local/sbin:$PATH を繰り返したので、それまでのPATHに /usr/local/sbin を加えたものになった ( /usr/local/sbin:PATH に /usr/local/sbin を加えた /usr/local/sbin:/usr/local/sbin:PATH) ・先頭のディレクトリを削除するつもりで unset PATH=/usr/local/sbin:$PATH と書いた (unset は変数そのものを削除します。変数内の特定の文字を削除するものではありません)

関連するQ&A