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

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

新規登録して質問してみよう
ただいま回答率
85.37%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Automator

Automatorは、作業を自動化するワークフロー構築ソフトウェア。Macに標準で搭載されています。ドラッグ&ドロップ操作で自動化レシピを作成。任意のショートカットキーで実行することが可能です。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

zsh

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

Q&A

解決済

2回答

3365閲覧

MacのAutomatorでシェルスクリプトが動作しない

kk.k

総合スコア13

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Automator

Automatorは、作業を自動化するワークフロー構築ソフトウェア。Macに標準で搭載されています。ドラッグ&ドロップ操作で自動化レシピを作成。任意のショートカットキーで実行することが可能です。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

zsh

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

0グッド

0クリップ

投稿2021/06/30 17:52

編集2021/07/01 15:03

##目的
MacのAutomatorを使用して、OCRを動作させたいと考えています。
その際に以下のコマンドを作成したのですが、うまく動作せず、理由がわかりません。。

code

1tesseract /Users/@@@/Desktop/forOCR.png - -l jpn | pbcopy

##現状
tesseractのインストール・動作はうまく行っています。(ターミナルにて動作確認済み)
OCRも問題なく動作しております。

##エラーメッセージ
特にありません。

##予測
MacのAutomator側でtesseractが見つけられていないことが原因なのかなと思っておりますが、
改善方法がわかりません。

以下のサイトを参考に色々試しましたが改善できませんでした。
https://www.digitalboo.net/post/4338/automator-exiftool-shell

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

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

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

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

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

guest

回答2

0

ベストアンサー

フルパスを取得するにはtesseractコマンドが実行できる環境で、つまりAutomatorではなくターミナルで which tesseract を実行します。

たとえば仮に

sh

1which tesseract

とターミナルで実行して

/usr/local/bin/tesseract

と表示されたら、Automatorでは

sh

1/usr/local/bin/tesseract /Users/@@@/Desktop/forOCR.png - -l jpn

と実行します。

フルパスで指定して実行する以外の方法として、tesseractがターミナルからは実行できるということは、tesseractの実行ファイルが置かれているディレクトリはシェルの設定ファイルでコマンドサーチパスに追加されているはずですので、Automatorのシェルでもこの設定ファイルを読み込んでからtesseractを実行する、という方法もあります。

投稿2021/07/03 04:12

etherbeg

総合スコア1195

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

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

kk.k

2021/07/04 13:01

ありがとうございます! /usr/local/bin/tesseract /Users/@@@/Desktop/forOCR.png - -l jpn こちらの記述に変更することで正常に動作したようです! ただし、| /usr/bin/pbcopyを追記してもクリップボードに出力結果がコピーされないようです。。 こちらはまた違う理由でしょうか。。? もしご存知であれば教えて頂きたいです。。
etherbeg

2021/07/04 13:50

「正常に動作したよう」というのは何をもって正常に動作したと判断しましたか? Automatorのシェルで標準出力に予想通りの出力が行われていることは確認しましたか?(Automatorのアクションの「結果」タブで出力結果を確認しましたか?) 「クリップボードに出力結果がコピーされない」というのはどのようにして確認しましたか? Automatorのワークフローの実行後にテキストエディットなどでペーストをしても予想していた結果が貼り付けられない、ということでしょうか? そのとき貼り付けられたのは空文字(何も貼り付けられない)ですか、それとも予想とは違う何かの文字(たとえばAutomatorのワークフロー実行前にクリップボードにコピーされていた文字列など)ですか? ちなみに pbcopy はフルパスで指定しなくても大丈夫ですよ。 Automatorのシェルで echo $PATH を実行して表示されたディレクトリにある実行ファイルはフルパスで指定しなくても大丈夫です。 おそらく /usr/bin /bin /usr/sbin /sbin の4つのディレクトリが表示されると思います。
kk.k

2021/07/05 02:08

曖昧な質問で申し訳ありません。 /usr/local/bin/tesseract /Users/@@@/Desktop/forOCR.png - -l jpn 上記シェルを実行することで、Automatorのアクションの「結果」タブにOCR後のテキストが出力されております。 /usr/local/bin/tesseract /Users/kisen/Desktop/forOCR.png - -l jpn| pbcopy ただし、上記記述に変更すると、Automatorのアクションの「結果」タブでは出力が以下(空文字)のようになってしまいます。 ( "" ) そしてクリップボードを確認しても、何も保存されていないようです。 ちなみに pbcopy はフルパスで指定しなくても大丈夫ですよ。 Automatorのシェルで echo $PATH を実行して表示されたディレクトリにある実行ファイルはフルパスで指定しなくても大丈夫です。 ⇨こちら勉強になります!ありがとうございます!!
etherbeg

2021/07/05 06:07

> Automatorのアクションの「結果」タブにOCR後のテキストが出力されております こちらはちゃんと動作しているようですね。 > 上記記述に変更すると、Automatorのアクションの「結果」タブでは出力が以下(空文字)のようになってしまいます これも正常な動作ですね。ターミナルで実行した場合でも、出力結果をパイプで pbcopy に渡した場合は、画面には(標準出力には)何も出力されないはずです(クリップボードには出力結果がコピーされる)。 試しにAutomatorのシェルで echo $PATH | pbcopy を実行してみると、アクションの「結果」タブには何も出力されず、クリップボードには「/usr/bin:/bin:/usr/sbin:/sbin」という文字列がコピーされました。 質問者さんの環境で同じことを実行するとどうなりますか? やはりクリップボードには何もコピーされませんか?
kk.k

2021/07/05 09:32

> 試しにAutomatorのシェルで > echo $PATH | pbcopy > を実行してみると、アクションの「結果」タブには何も出力されず、クリップボードには「/usr/bin:/bin:/usr/sbin:/sbin」という文字列がコピーされました。 上記シェルを実行すると、「/usr/bin:/bin:/usr/sbin:/sbin」の文字列がクリップボードにコピーされます。 ただし、/usr/local/bin/tesseract /Users/@@@/Desktop/forOCR.png - -l jpn | pbcopy このような記述にするとクリップボードへはコピーされません。。
etherbeg

2021/07/05 11:29

確認ですけどターミナルで実行した時はクリップボードにもちゃんとコピーされてるんですよね? Automatorで以下のコマンドを試していただいて、結果を教えてもらいたいです。 3つありますがすみませんが3つともお願いします。 /usr/local/bin/tesseract /Users/@@@/Desktop/forOCR.png - -l jpn 2>&1 | pbcopy /usr/local/bin/tesseract /Users/@@@/Desktop/forOCR.png stdout -l jpn | pbcopy /usr/local/bin/tesseract /Users/@@@/Desktop/forOCR.png stdout -l jpn 2>&1 | pbcopy
kk.k

2021/07/05 16:02

それぞれターミナル、automatporで実行したところ、以下のような結果になっております。 【ターミナル】 ①/usr/local/bin/tesseract /Users/@@@/Desktop/forOCR.png - -l jpn | pbcopy ⇨(OCR結果(成功)) ②/usr/local/bin/tesseract /Users/@@@/Desktop/forOCR.png - -l jpn 2>&1 | pbcopy ⇨Warning: Invalid resolution 0 dpi. Using 70 instead. Estimating resolution as 142 Error in boxClipToRectangle: box outside rectangle Error in pixScanForForeground: invalid box (OCR結果(成功)) ③/usr/local/bin/tesseract /Users/@@@/Desktop/forOCR.png stdout -l jpn | pbcopy ⇨(OCR結果(成功)) ④/usr/local/bin/tesseract /Users/@@@/Desktop/forOCR.png stdout -l jpn 2>&1 | pbcopy ⇨Warning: Invalid resolution 0 dpi. Using 70 instead. Estimating resolution as 142 Error in boxClipToRectangle: box outside rectangle Error in pixScanForForeground: invalid box (OCR結果(成功)) 【automator】 ①/usr/local/bin/tesseract /Users/@@@/Desktop/forOCR.png - -l jpn | pbcopy ⇨出力されず ②/usr/local/bin/tesseract /Users/@@@/Desktop/forOCR.png - -l jpn 2>&1 | pbcopy ⇨出力されず ③/usr/local/bin/tesseract /Users/@@@/Desktop/forOCR.png stdout -l jpn | pbcopy ⇨出力されず ④/usr/local/bin/tesseract /Users/@@@/Desktop/forOCR.png stdout -l jpn 2>&1 | pbcopy ⇨出力されず
etherbeg

2021/07/05 21:41 編集

ありがとうございます。状況がよくわかりました。では /usr/local/bin/tesseract /Users/@@@/Desktop/forOCR.png - -l jpn | LANG=ja_JP.UTF-8 pbcopy ではどうですか? これはAutomatorでだけ試していただけたらいいです(ブラウザのウィンドウ幅によっては2行に分かれたコマンドに見えるかもしれませんが、1行のコマンドです)。
kk.k

2021/07/06 15:24

上記の記述を試したところ、正常に動作しました! 原因としては、automator上では出力結果が文字化けしてしまい、クリップボードにコピーができなかった。ということでしょうか?
etherbeg

2021/07/07 13:05

大雑把にいうとそういうことですが、もう少し正確にいうと、tesseractから出力された文字列で使われていた文字エンコーディングと、pbcopyがクリップボードにその文字列を保存する際に使った文字エンコーディングが一致していなかったことが原因で、この不一致の結果は文字化けではなくプログラム内部での何らかのエラーだと思います。 (文字化けというのは人間が認識するものなので、文字化けしてしまった結果クリップボードにコピーできなかったという説明はちょっと違和感あります…。) ターミナルで man pbcopy と実行すると、pbcopyコマンドのman page(マニュアルページ)が表示されます。その中のDESCRIPTIONのセクションを読むと、今回の原因や裏で何が起こっていたかがある程度わかると思います(読み方はEnterで1行進む、スペースバーで1ページ進む、qで終了です)。 以下は参考までに /usr/local/bin/tesseract /Users/@@@/Desktop/forOCR.png - -l jpn | LANG=ja_JP.UTF-8 pbcopy は export LANG=ja_JP.UTF-8 /usr/local/bin/tesseract /Users/@@@/Desktop/forOCR.png - -l jpn | pbcopy とコマンドを分けて書いてもいいです。 ユーザのホームディレクトリ(/Users/@@@) は ~ と書くこともできますので、 /usr/local/bin/tesseract ~/Desktop/forOCR.png - -l jpn | pbcopy とちょっとだけスッキリ書くこともできます。
guest

0

全てのコマンドやファイルをフルパスで指定するとどうなりますか?

投稿2021/06/30 22:31

CHERRY

総合スコア25216

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

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

kk.k

2021/07/01 15:14

コマンド関連に対する知見が浅く大変恐縮なのですが、 フルパスでコマンドを指定するにはどうすればよいのでしょうか。。? Automator上でwhichコマンドを探しtesseractを検索してもnot foundが出てしまうため、 そもそもAutomatorに権限が無いのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問