I have written a python program that needs a first command line argument to run from the Terminal. The program can be used to copy a text to the clipboard when it is run with a certain keyword.
~ python3 mclip.py 'agree'
This use case is just an exercise to understand, how I can run a batch file on macOS (or shell script in macOS terminology).
I have created the following shell script and saved it as mclip.command
:
#!/usr/bin/env bash python3 /Users/Andrea_5K/mclip.py
My idea is to execute my shell script from the spotlight input window, passing the argument ‘agree’. How can I do that?
On windows the batch file would look like that (mclip.bat
):
@py.exe C:path_to_my_filemclip.py %* @pause
I can press WIN-R and type mclip *argument*
to run the program. But how can I do the same on a Mac? I cannot type mclip agree
in spotlight, that doesn’t work like in WIN-R.
#! python3 # mclip.py - A multi-clipboard program. TEXT = { 'agree': """Yes, I agree. That sounds fine to me.""", 'busy': """Sorry, can we do this later this week or next week?""", 'upsell': """Would you consider making this a monthly donation?""", } import sys, pyperclip if len(sys.argv) < 2: print('Usage: python mclip.py [keyphrase] - copy phrase text') sys.exit() keyphrase = sys.argv[1] # first command line arg is the keyphrase if keyphrase in TEXT: pyperclip.copy(TEXT[keyphrase]) print('Text for ' + keyphrase + ' copied to clipboard.') else: print('There is no text for ' + keyphrase)
Advertisement
Answer
Assume the shell script (mapIt.command) is:
#!/usr/bin/env bash python3 /path/to/my/pythonScript.py $@
The $@ is interpreted as a list of command line arguments.
I can run the shell script in the MacOS Terminal like that:
sh mapIt.command Streetname Number City
The command line arguments Streetname Number City are forwarded to the python script.