Shell commands work in Terminal but not in Automator service
I try to implement these two very simple commands in an Automator service to be run by a keyboard short (takes a screenshot and OCRs it):
screencapture -i /tmp/tesseract.png
tesseract /tmp/tesseract.png stdout|tr -d \\f|pbcopy
This works great when I execute these commands in the Terminal, but not when I make it an Automator service (sorry this is in German). I don't understand: Why does it work in the one case and not in the other? Does it have anything to do with tesseract?
Solution 1:
Any executable that is not within the PATH
passed to the Run Shell Script action, which is /usr/bin:/bin:/usr/sbin:/sbin
, you must use the fully qualified pathname of the executable.
In this case, e.g. /path/to/tesseract
You should be able to get its path in Terminal using:
which tesseract
As tesseract
is not a default of macOS, it may be in /usr/local/bin/
, however which tesseract
should report its fully qualified pathname.
Instead of using the fully qualified pathname, or in conjunction with, you can also add a PATH
statement to the top of the Run Shell Script action, e.g. for a bash
shell:
PATH="${PATH}:/usr/local/bin/"
You could also just substitute everything to the right of the =
sign for what the output in Terminal, e.g. echo $PATH
is. Then the Run Shell Script action has the same PATH
as Terminal.