I want to put together an IPython notebook with some shell commands and their input. In the bash prompt I can use "here-document" syntax:
bash-3.2$ mysql -u root <<END_IPUT > use mydb; > show tables; > END_INPUT How do I get the same effect in IPython, and specifically in a jupyter notebook? I know how to execute shell commands as IPython as "line magics" or "cell magics", e.g.:
In [7]: !! ls -tF Out[7]: ['Demo-notebook.ipynb', 'createdb.sql', ... I've looked at IPython as a system shell, which shows how to enable some syntactic niceties. After the following, I can run system commands without prepending ! or !!
# Turn everything in $PATH into an alias; # then enable calling aliases without ! or % %rehashx %autocall 2 But none of this helps with providing input to these commands inline: The here-document syntax is invalid in IPython, and results in a python SyntaxError. So how do I do it?
%%bash, and put bash code in the rest of it.%%sx, which does the same I think. But the documentation for%bashled me to%%script, which is exactly what I was looking for. In the meantime I also found an extension specifically forsql, which solved my immediate problem even better. But if you want to write an answer expanding on your suggestion, I'll accept it.