ynomura
@ynomura (Yukinori Nomura)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

AppleScript の do shell script でコマンドが not found (PATHが効かない)

解決したいこと

AppleScript で、do shell script を使用してシェルコマンドを実行したいのですが、brew で追加した php や jq コマンドが not found になる問題。
/opt/homebrew/bin/php のようにフルパス指定では動作する。

例)
テキストのURLエンコードをしようとして、上記コマンドなどを実行しようとして、エラーが発生しました。
解決方法を教えて下さい。

発生している問題・エラー

error "sh: php: command not found" number 127

自分で試したこと

.zshrc にはパスを追加している。
なので、
"ターミナル" では、 $ php -help で問題なく動作する。
$ jq -help も問題なく動作するが、AppleScript の do shell script では同様に command not founde になります。

0

2Answer

1コマンドで完結するなら別ですが、
シェルファイルを書いて、do shell script からシェルファイルを起動するのはどうでしょうか?

1Like

Comments

  1. @ynomura

    Questioner

    その手もありますね。
    今回の、URLエンコードの処理については、AppleScript ではなく、
    JXAで書くと、encodeURIComponent が使えるので、そちらの方が楽ですね。

以下に書いてあるように、 do shell script に .zshrc は影響しません。パスは常に規定の値1が使われます。

https://developer.apple.com/library/archive/technotes/tn2065/_index.html#//apple_ref/doc/uid/DTS10003093-CH1-TNTAG1-MY_COMMAND_WORKS_FINE_IN_TERMINAL__BUT_WHEN_I_TRY_TO_USE_IT_IN_DO_SHELL_SCRIPT__I_GET_AN_ERROR_ABOUT____COMMAND_NOT_FOUND______WHAT___S_GOING_ON_

基本的にはフルパスを使ってください。どうしても .zshrc をロードしたいなら、以下のように zsh -i -c コマンド文字列 とすれば zsh 経由でコマンドを実行することができます。

do shell script "zsh -i -c 'jq -help'"
  1. 値は do shell script "sh -c 'echo $PATH'" で確認できます。 macOS 14.5 / AppleScript 2.8 の環境では /usr/bin:/bin:/usr/sbin:/sbin でした。

0Like

Comments

  1. @ynomura

    Questioner

    早速の情報提供ありがとうございます!
    やはり、フルパスで指定するのが簡単なようですね。

Your answer might help someone💌