Skip to content

Instantly share code, notes, and snippets.

@garybehrend
Forked from omz/Shell.py
Last active August 29, 2015 14:22
Show Gist options
  • Select an option

  • Save garybehrend/f4bb101339ad956d2dd5 to your computer and use it in GitHub Desktop.

Select an option

Save garybehrend/f4bb101339ad956d2dd5 to your computer and use it in GitHub Desktop.

Revisions

  1. @omz omz revised this gist Nov 18, 2012. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Shell.py
    Original file line number Diff line number Diff line change
    @@ -102,7 +102,7 @@ def do_mkdir(self, line):

    def do_rm(self, line):
    args = shlex.split(line)
    if len(args == 0):
    if len(args) == 0:
    return
    if not os.path.exists(args[0]):
    print 'Invalid path: ' + args[0]
  2. @omz omz created this gist Nov 13, 2012.
    125 changes: 125 additions & 0 deletions Shell.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,125 @@
    # Based on https://gist.github.com/4063716
    #
    # Provides a simple shell with basic
    # commands for dealing with files and
    # directories.
    #
    # This script will try and prevent
    # unsafe file operations outside of
    # Documents directory.
    #
    # Add a setting named allow_unsafe and
    # in the config dict and set to True
    # to disable these preventative measures.

    import os
    import cmd
    import console
    import shlex
    import sys

    config = {}

    def main():
    shell = Shell()
    shell.prompt = '> '
    shell.cmdloop()

    colors = {'blue':(0,0,1),
    'red':(1,0,0)}

    def get_color(color):
    return colors.get(color, None)

    def print_in_color(color_name, msg):
    color = get_color(color_name)
    if color:
    console.set_color(*color)
    print msg
    console.set_color()

    class Shell(cmd.Cmd):

    def __init__(self):
    cmd.Cmd.__init__(self)
    self.startup_dir = os.getcwd()

    def safe_path(self, path):
    if config.get('allow_unsafe'):
    return True
    paths = [self.startup_dir, os.path.normpath(path)]
    return self.startup_dir == os.path.commonprefix(paths)

    def do_ls(self, line):
    try:
    for f in sorted(os.listdir(os.getcwd())):
    if os.path.isdir(f):
    print_in_color('blue', f)
    else:
    print_in_color('default', f)
    except OSError, e:
    print e

    def do_pwd(self, line):
    print os.getcwd()

    def do_cat(self, line):
    args = shlex.split(line)
    if len(args) == 0:
    return
    try:
    with open(args[0], 'r') as f:
    for l in f:
    sys.stdout.write(l)
    except Exception, e:
    print_in_color('red', e)

    def do_cd(self, line):
    args = shlex.split(line)
    if not args:
    args = ['~/Documents']
    dir = os.path.expanduser(args[0])
    if os.path.exists(dir):
    os.chdir(dir)
    self.do_pwd(line)
    else:
    print 'Directory does not exist: ' + dir

    def do_mkdir(self, line):
    args = shlex.split(line)
    if len(args) == 0:
    return
    if not self.safe_path(os.getcwd()):
    print 'Changes to unsafe directories are disabled.'
    return
    if os.path.exists(args[0]):
    print 'Directory already exists: ' + args[0]
    return
    try:
    os.mkdir(args[0])
    except OSError, e:
    print e

    def do_rm(self, line):
    args = shlex.split(line)
    if len(args == 0):
    return
    if not os.path.exists(args[0]):
    print 'Invalid path: ' + args[0]
    return
    elif not self.safe_path(os.path.abspath(args[0])):
    print 'Changes to unsafe directories are disabled.'
    return
    elif os.path.isdir(args[0]):
    try:
    os.rmdir(args[0])
    except OSError, e:
    print e
    else:
    try:
    os.remove(args[0])
    except OSError, e:
    print e

    if __name__ == '__main__':
    main()