Catalinaがzshを標準にしたらしいので使っていたbashをzshに変えたのですが、シェルスクリプトを実行する際にshコマンドが省略できなくなっているのを気づきました。
例えばjisakuというシェルスクリプトがあるとすると
# 実行できる % sh jisaku # 実行できる % ./jisaku # 実行できない # zsh: command not found: jisakuとなる % jisaku
パソコンに自作コマンドを入れてパス通している場合とかは、これじゃ使えなくありませんか?自作コマンドパス通している時にはどうやって使ったらいいでしょうか?
だれか教えていただけたらすごく助かりますm(_ _)m
補足
今回追加した自作コマンドに関する情報をもう少し詳しく補足させていただきました。
zshにしてからhogeというコマンドでテストしています。
詳細は下記です。
# パス確認 % echo $PATH /Users/kimsungmin/.pyenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:~/myCommands:~/Desktop/hoge # パス追加 % cat ~/.zshrc eval "$(pyenv init -)" export PATH="$PATH:~/myCommands" export PATH="$PATH:~/Desktop/hoge" # hogeコマンドの内容 % cd ~/Desktop/hoge % cat hoge #! /bin/zsh echo "hogehoge" # 実際コマンドを叩いたら、、 % hoge zsh: command not found: hoge # shを付けたら普通に動きます。 % sh hoge hogehoge # ちなみにwhichはbashの時もzshの時も同じく出ないです。 % which hoge hoge not found
shが省略できないというシェルスクリプトの1行目(いわゆるshbangと呼ばれる部分)にはどのようになっていますか?
Mac使ってないので、正しくはどう書けばいいのかを具体的に指摘することは出来ませんが、
「#! /bin/bash」のような風になっているはずで、そこにフルパスで書かれているシェルが実行可能でなければいけないはずです。
zshになってからは
#!/bin/zsh
を使っています。
ちなみに右端をbashにしてもshにしても同じ症状です。
ちょっと自分が質問文を見誤ってましたが、「./jisaku」が実行できるのならshebangは正しいはずですね。@otnさんが指摘されているPATH指定のほうをもう少し調査したほうが良い気がします。(jisakuスクリプトのほうにPATHが通ってないと質問文で提示されている状態になると思うので。)
echo $PATHで確認しても通したパスには問題ないように見えます、、
なんでzshに変えたらこんな症状が出るんですかね、、ググっても同じような情報も出てこないのもおかしいですね
ん〜やはりパスを通したコマンドも前にsh付けないと起動しないですね〜bashの時みたいにファイル名をそのままコマンドにはできないですね。bashってこんなもんですかね?
「echo $PATH」の内容を質問文に公開する。
「which シェルファイル名」の結果を質問文に公開する。
「~/.zshrc」の内容を質問文に公開する。
あたりを行なわないと、「自分ではちゃんと設定したつもりだが動かない」以上の情報が、回答者には伝わりません。
すみません、もう少し詳しく追加してみました。
こちらでいかがでしょうか?
> export PATH="$PATH:~/Desktop/hoge"
を
export PATH="$PATH:$HOME/Desktop/hoge"
に変えるとどうなりますか?
動きました!!!
感謝です!!!泣
もともとはhogeではなく~/myCommandsにパスを通したかったのですがこれも$HOMEにしたら無事動いてくれました!
bashの時はbash_profileに~/って書いても動いたのでここはまったく疑っておりませんでした!
回答してくださったら、ベストアンサーにします!
お気持ちだけありがたくいただきます。
今回は問題点をいち早く指摘された @otnさんの回答がベストアンサーにふさわしいと自分は思います。
> bashの時はbash_profileに~/って書いても動いたのでここはまったく疑っておりませんでした!
bashでも"~/myCommands" と""で囲んだら~をホームディレクトリに置換する機能は動作しません。 「echo $PATH」をbashで実行すると、「~」がそのまま含まれたPATHが表示されるのでは。""の中で展開されるのは、$HOMEのような変数展開などシェルの展開機能の一部だけです。
で、bashの場合は(展開されていない)「~/hogehoge」でも、hogehogeの中を検索してくれます。
回答1件
あなたの回答
tips
プレビュー