'How can I run shell (terminal) in Google Colab?

I know that I can call !ls to issue ls command to shell.

But I want features like history or tab-completion.

Is it possible to do so in Google Colab?



Solution 1:[1]

You can use jQuery Terminal Emulator backed with google.colab.kernel.invokeFunction

Here's an example notebook.

The key part is here, where you back it with shell function.

def shell(command):
  return JSON([getoutput(command)])
output.register_callback('shell', shell)

And here's how you use invokeFunction:

try {
    let res = await google.colab.kernel.invokeFunction('shell', [command])
    let out = res.data['application/json'][0]
    this.echo(new String(out))
} catch(e) {
    this.error(new String(e));
}

Here's a screenshot.

enter image description here

Update (7/2020)

I have taken @Anant's answer and add it into my library. Now you can run console easily with just

!pip install kora
from kora import console
console.start()  # and click link

Update (12/2020)

If you subscribe to Colab Pro, terminal is now available. Just click the 'Terminal' icon on the left pane.

Terminal Icon

Solution 2:[2]

Just type the following. It will spawn a bash session.

!bash

It displays commands in a password format. If you change the input type from password to text using browser dev tools, it will be really helpful.

Solution 3:[3]

I just wrote a tool to run xterm in colab. Just three lines of code and you can get an interactive terminal.

!pip install colab-xterm
%load_ext colabxterm
%xterm

If you feel it is useful, please star this project. ??

Screenshot

enter image description here

Solution 4:[4]

Better try this -

  1. Install Teleconsole on Colab, its a package to use terminal over internet -
     !curl https://www.teleconsole.com/get.sh | sh
    
  2. Run below code on colab notebook to use Teleconsole -
     import subprocess as sp
     process = sp.Popen("teleconsole",shell=True,stdin=sp.PIPE,stdout=sp.PIPE,stderr=sp.PIPE)
     for i in range(6):
       print(process.stdout.readline().decode()) 
    
    You should get output something like -
     Starting local SSH server on localhost...
     Requesting a disposable SSH proxy on eu.teleconsole.com for root...
     Checking status of the SSH tunnel...
    
     Your Teleconsole ID: eu88d75d24084905shgdjhjhfgd1934e55c3786438a3
    
     WebUI for this session: 
     https://eu.teleconsole.com/s/88d75d24084905shgdjhjhfgd1934e55c3786438a3
    
  3. Either open the web interface by following the link for accessing the terminal or open a local shell terminal and install Teleconsole using the command -
     curl https://www.teleconsole.com/get.sh | sh
    
    Then use the below code to join the terminal using Teleconsole Id you got in step No. 2-
     teleconsole join <Teleconsole ID>
    

This method can also be tunneled through ssh with some additional steps.

Solution 5:[5]

Google Colab Shell

Free Terminals for everyone
Displays a terminal for Google Colab

https://github.com/singhsidhukuldeep/Google-Colab-Shell

Setup

pip install google-colab-shell

Usage

https://colab.research.google.com/github/singhsidhukuldeep/Google-Colab-Shell/blob/master/Google_Colab_Shell.ipynb

# import the module once
from google_colab_shell import getshell
## Anytime you want to open a terminal

getshell()

getshell(height=400) # custom height of the terminal

IMPORTANT: Make sure getshell is the last command in the cell.

Documentation

Displays a terminal for Google Colab. <3 Google

Make sure this is the last command in the cell.

    Parameters
    ----------
    height : int, default 400
        height of the rendered terminal

    Returns
    -------
    IPython.display.HTML
        Displays the terminal

    Examples
    --------
    >>> getshell()

    >>> getshell(height=400)

https://github.com/singhsidhukuldeep/Google-Colab-Shell

Please Contribute: https://github.com/singhsidhukuldeep/Google-Colab-Shell#todo-want-to-contribute ?

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2
Solution 3
Solution 4
Solution 5