Not with %run presently (see bottom section); however, you don't need to run a bash script from inside your notebook or invoke subprocess. You can just send the command to a separate shell instance and run the script without affecting your local namespace using the following:
!python myscript.py
See 'Shell Commands in IPython' here and sections below that for more information. Jupyter Python notebooks build on IPython abilities.
As I advise here, usually you want the more full-featured %run in Jupyter because it handles passing back errors, input prompts, and connects the output from the script better to Jupyter notebooks in general.
So you are thinking well along the line of best practices; however, you have overlap with variables in your notebook the main portion of you script that you want to avoid that can easily be done with !python myscript.py. Normally, there wouldn't actually be much in your main namespace as you modularize your script more with functions.
I see the text here that makes you think -p option should do as you thought:
In this mode, the program’s variables do NOT propagate back to the IPython interactive namespace (because they remain in the namespace where the profiler executes them).
It does seem to describe what you are saying, and I am at a loss as to explain why it doesn't. I even tried current IPython and the same thing happens.