User Tools

Site Tools


action:Execute_a_Shell_Script

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
action:Execute_a_Shell_Script [2019/07/01 02:46]
peternlewis [Execute a Shell Script]
action:Execute_a_Shell_Script [2019/11/25 16:48]
JMichaelTX ADD awk examples
Line 1: Line 1:
 ====== Execute a Shell Script ====== ====== Execute a Shell Script ======
  
-The //Execute a Shell Script// action executes a specified shell script, either from a file or from the script embedded in the action.+The //Execute a Shell Script// action executes a specified shell script ​using `/bin/sh`, either from a file or from the script embedded in the action. 
 + 
 +**Important:​** 
 + 
 +* It is best to always specify the language using the `#!` at the front of the script. 
 +* The script is executed with the `sh` shell, so if you want to use another language, or use any special kinds of shell-specific syntax, then you should specify the language. 
 +* For more details and examples, see [[https://​forum.keyboardmaestro.com/​t/​impact-of-macos-catalina-defaulting-to-unix-shell-using-zsh/​15503/​12?​u=jmichaeltx|How to Use Shebang at Top of Shell Script]]
  
 To execute the script from an external file, choose the "​Execute Script File" in the choices for script location. To execute the script from an external file, choose the "​Execute Script File" in the choices for script location.
Line 10: Line 16:
  
 If the script fails, the action will fail (v9.0+), potentially aborting the macro. If the script fails, the action will fail (v9.0+), potentially aborting the macro.
 +
 +
  
 ==== Using Keyboard Maestro Variables ==== ==== Using Keyboard Maestro Variables ====
Line 38: Line 46:
  
 Note that you can only read these environment variables. ​ You cannot write to them (or more accurately, you can write to them but that will not change the Keyboard Maestro variables that they were created from). Note that you can only read these environment variables. ​ You cannot write to them (or more accurately, you can write to them but that will not change the Keyboard Maestro variables that they were created from).
 +
 +=== awk ===
 +
 +[Using shell variables in awk](https://​stackoverflow.com/​a/​15787068/​915019) is also different than in most other shell languages. ​ You need to pass the environment variable as parameter to the -v flag.
 +
 +Some examples:
 +
 +```bash
 +# EXAMPLE 1
 +
 +echo | awk -v my_var=4 '​{print "My var is " my_var}'​
 +#-->My var is 4
 +
 +# EXAMPLE 2
 +
 +VAR=3
 +echo | awk -v env_var="​$VAR"​ '​{print "The value of VAR is " env_var}'​
 +#-->The value of VAR is 3
 +
 +# USING KM VARIABLES with awk
 +
 +echo | awk -v env_var="​$KMVAR_My_KM_Variable"​ '​{print "The value of My_KM_Variable is: \""​env_var"​\""​}'​
 +#-->The value of My_KM_Variable is: "Text from KM var"
 +```
 +
 +For a KM Macro that shows this, see:\\
 +**[MACRO: ​  Using KM Variables with Bash awk [Example]](https://​forum.keyboardmaestro.com/​t/​passing-argument-to-awk/​16169/​3)**
  
 ==== Passing Paths in Variables ==== ==== Passing Paths in Variables ====
Line 98: Line 133:
   * Pasted in to the current selection.   * Pasted in to the current selection.
   * Saved to a variable.   * Saved to a variable.
 +  * Appended to a variable (v9.0+).
   * Saved to the system or a Named Clipboard.   * Saved to the system or a Named Clipboard.
   * Asynchronously ignored — the action runs while the macro continues on.   * Asynchronously ignored — the action runs while the macro continues on.
Line 183: Line 219:
 that is the script will search for tools in the `/usr/bin` directory, then in the `/bin` directory, then `/usr/sbin` and finally `/​sbin`. ​ Only tools installed by the system will be in these directories - any tools you have installed will almost certainly be elsewhere and so not found by default because: that is the script will search for tools in the `/usr/bin` directory, then in the `/bin` directory, then `/usr/sbin` and finally `/​sbin`. ​ Only tools installed by the system will be in these directories - any tools you have installed will almost certainly be elsewhere and so not found by default because:
  
-  * **shell scripts are executed in non-interactive mode** (see the INVOCATION section of the [bash man page](https://​developer.apple.com/​library/​mac/​documentation/​Darwin/​Reference/​ManPages/​man1/​bash.1.html)), the **only** path preset by default is the system path.+  * **shell scripts are executed in non-interactive mode** (see the INVOCATION section of the sh man page), the **only** path preset by default is the system path.
   * **Thus, your tools or files may not be automatically accessible.**   * **Thus, your tools or files may not be automatically accessible.**
   * The `$PATH` environment variable you may have set in Terminal is **not** used.   * The `$PATH` environment variable you may have set in Terminal is **not** used.
Line 272: Line 308:
 ==== Forum ==== ==== Forum ====
  
 +- [[https://​forum.keyboardmaestro.com/​t/​impact-of-macos-catalina-defaulting-to-unix-shell-using-zsh/​15503/​12?​u=jmichaeltx|How to Use Shebang at Top of Shell Script]]
 - [[https://​forum.keyboardmaestro.com/​t/​png-metadata-comment/​6375/​29|PNG Metadata "​Comment"​]] - [[https://​forum.keyboardmaestro.com/​t/​png-metadata-comment/​6375/​29|PNG Metadata "​Comment"​]]
 - [[https://​forum.keyboardmaestro.com/​t/​having-trouble-with-quotes-and-shell-variables/​6236/​9|Having trouble with quotes and shell variables]] - [[https://​forum.keyboardmaestro.com/​t/​having-trouble-with-quotes-and-shell-variables/​6236/​9|Having trouble with quotes and shell variables]]
action/Execute_a_Shell_Script.txt · Last modified: 2023/09/22 04:39 by peternlewis