This tutorial summarizes useful tips for using Shell commands in Google Colab (which basically is IPython).
Any commands that work in the command-line can be used in Google Colab by prefixing it with !. For example, ls and bash can be run as depicted on the left hand side figure.
The ! character requires us to prepend each line with !. If we want to interpret an entire cell as a shell script, we insert %%shell at the beginning of a cell (also, see the left hand side figure as an example).
Note: this Colab notebook shows some examples of them.
We can interact the output of any Shell command with IPython. Following are examples:
content = !lsprint(content)The above will print out ['sample_data'].
Note that this is handled by a special type defined in IPython called SList. To verify this, let's try:
type(content) It will print out IPython.utils.text.SList.
Passing Python variables into the Shell can be done by the syntax {variable name}. For instance,
message = "hello"!echo {message}The above prints out hello.
!cd cannot be used to navigate in Colab notebooks. The reason is that Shell commands are executed in a temporary sub-Shell. To handle this, you can use the magic %cd as follows:
%cd /usr/localThe above navigates the file system to '/usr/local'.
We can use %automatic to toggle Shell-like magic functions. After toggling, the Shell-like functions can be used without '%'. These functions supported by %automagic are %cd, %cat, %cp, %env, %ls, %man, %mkdir, %more, %mv, %pwd, %rm, and %rmdir.
We can use %env to print out your working environment. Following is an example of executing it.
{'CLICOLOR': '1', 'CLOUDSDK_CONFIG': '/content/.config', 'COLAB_GPU': '0', 'CUDA_PKG_VERSION': '10-0=10.0.130-1', 'CUDA_VERSION': '10.0.130', 'CUDNN_VERSION': '7.6.0.64', 'DATALAB_SETTINGS_OVERRIDES': '{"kernelManagerProxyPort":6000,"kernelManagerProxyHost":"172.28.0.3","jupyterArgs":["--ip=\\"172.28.0.2\\""]}', 'DEBIAN_FRONTEND': 'noninteractive', 'ENV': '/root/.bashrc', 'GCS_READ_CACHE_BLOCK_SIZE_MB': '16', 'GIT_PAGER': 'cat', 'GLIBCPP_FORCE_NEW': '1', 'GLIBCXX_FORCE_NEW': '1', 'HOME': '/root', 'HOSTNAME': '2b5001c68ac9', 'JPY_PARENT_PID': '23', 'LANG': 'en_US.UTF-8', 'LAST_FORCED_REBUILD': '20190507', 'LD_LIBRARY_PATH': '/usr/local/nvidia/lib:/usr/local/nvidia/lib64', 'LD_PRELOAD': '/usr/lib/x86_64-linux-gnu/libtcmalloc.so.4', 'LIBRARY_PATH': '/usr/local/cuda/lib64/stubs', 'MPLBACKEND': 'module://ipykernel.pylab.backend_inline', 'NCCL_VERSION': '2.4.2', 'NO_GCE_CHECK': 'True', 'NVIDIA_DRIVER_CAPABILITIES': 'compute,utility', 'NVIDIA_REQUIRE_CUDA': 'cuda>=10.0 brand=tesla,driver>=384,driver<385 brand=tesla,driver>=410,driver<411', 'NVIDIA_VISIBLE_DEVICES': 'all', 'OLDPWD': '/', 'PAGER': 'cat', 'PATH':'/usr/local/bin:/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/tools/node/bin:/tools/google-cloud-sdk/bin:/opt/bin', 'PWD': '/', 'PYTHONPATH': '/env/python', 'PYTHONWARNINGS': 'ignore:::pip._internal.cli.base_command', 'SHELL': '/bin/bash', 'SHLVL': '1', 'TERM': 'xterm-color', 'TF_FORCE_GPU_ALLOW_GROWTH': 'true', '_': '/tools/node/bin/node'}Both % and %% indicates magic commands but in different flavors. Character % indicates a line magic, which operates on a single line of input. On the other hand, character %% indicates a cell magic, which operates on multiple lines of input. The topmost figure exemplifies the use of %%writefile for writing outputs to a file.
Other blogged posts >> Tutorials