omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    Welcome!

    This is the community forum for my apps Pythonista and Editorial.

    For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.


    Advanced shell - shellista

    Pythonista
    16
    41
    44196
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • pudquick51
      pudquick51 last edited by

      https://gist.github.com/4139094

      <u><b>Commands and features:</b></u><ul>
      <li>cd - change directory</li>
      <li>pwd - print current working directory</li>
      <li>ls - list directory contents (and file sizes)</li>
      <li>cat - print the contents of a file</li>
      <li>q/quit/exit/logoff/logout - exit the shell</li>
      <li>mkdir - make a directory</li>
      <li>mv - move or rename files / directories</li>
      <li>cp - copy files / directories (recursively)</li>
      <li>rm - delete files / directories (recursively)</li>
      <li><b>unzip</b> - unzip zip archives</li>
      <li><b>untar</b> - untar tar archives</li>
      <li><b>ungzip / gunzip</b> - ungzip gzipped files</li>
      <li>Supports <b>wildcard matches</b> (matching any number of characters)</li>
      <li>Supports <b>? / question mark matches</b> (matching exactly one of any character)</li>
      <li>Supports <b>[ranges]</b> (like [a-z], [0-9], [a-f0-9], etc.)</li>
      <li>Supports <b>~ / tilde replacement</b> (defaults to Documents folder)</li>
      <li>Supports <b>environment variables</b> ($HOME, but you can expand it)</li>
      <li>Supports <b>single quote escaping</b> (special characters are disabled)</li>
      <li>Supports <b>backslash escaping</b> (for individual special characters)</li>
      <li>Supports <b>double quotes</b> (for preserving spaces, but allowing special sequences)</li></ul>

      <u>Examples of advanced usage:</u>
      <b>ls .py /.py</b> (lists all .py files in current directory and at the top level of any folders in current directory)
      <b>cp ~/
      .py backup</b> (copies all python scripts in the root scripts directory to a folder named 'backup')
      <b>rm test[1-3]?.txt</b> (removes files test1a.txt, test2a.txt, test2b.txt, test2c.txt, test3-.txt, etc.)

      This is an intial (rough) port of a script I put together for another python interpreter on the app store. I'll be porting the rest of the commands soon: unzip, ungzip, untar, wget/curl (basic download functionality)

      Enjoy :)

      <br>
      <b>For the interested programmer:</b>

      This script uses a pure python re-implementation of some of the more basic globbing of "bash" which I wrote up myself. It's a little different than shlex, glob, or shlex+glob in that matching happens in a single parsing run through. It depends on glob for wildcard handling, but only after my code has already handled all character escapes and word parsing.

      <u>An example where shlex/glob fails:</u>

      In the current working directory are three files: 'test apple', 'peach', 'test a*' (with an asterisk as part of the name)

      The command to parse is the string: rm 'test a*' peach

      shlex interprets it as ['rm', 'test a*', 'peach'], which glob then interprets the file portion as a match of three files: ['test apple', 'test a*', 'peach']. shlex unfortunately clobbers quotes that in a bash environment specify that the special character should be treated as a literal. This would result in deletion of <b>all 3 files</b>.

      With my parser, the single quotes around 'test a*' are interpreted bash-style to mean escaping of the special character '' - disabling it as a wildcard match and turning it into a literal match, resulting in the deletion of only two files: 'test a' and 'peach'.

      FishCo 1 Reply Last reply Reply Quote 0
      • omz
        omz last edited by

        Wow, this is pretty cool! Thanks for sharing.

        As a minor improvement, I would suggest to call editor.reload_files() after a mv, cp, or rm command, so that the library view is updated correctly. Actually, this would only be necessary if those commands affect .py files within the Documents directory, but I guess always calling it doesn't hurt much either.

        1 Reply Last reply Reply Quote 0
        • pudquick51
          pudquick51 last edited by

          <b>Changes:</b>
          <ul><li>Corrected a bug in the 'cp' command.</li>
          <li>Added <b>unzip</b> command.</li></ul>

          1 Reply Last reply Reply Quote 0
          • pudquick51
            pudquick51 last edited by

            <b>Changes:</b>
            <ul><li>Corrected a bug in the 'unzip' command.</li>
            <li>Added <b>untar</b> command.</li></ul>

            1 Reply Last reply Reply Quote 0
            • pudquick51
              pudquick51 last edited by

              <b>Changes:</b>
              <ul><li>Added <b>ungzip/gunzip</b> command.</li></ul>

              1 Reply Last reply Reply Quote 0
              • PKHG222
                PKHG222 last edited by

                Nice, tried cd, ls, mv and rm , works on Documents nicely
                cd .. several time is not allowed (the Pythonista app dir e.g.)

                1 Reply Last reply Reply Quote 0
                • DaveR133
                  DaveR133 last edited by

                  Nice. Thanks. I could have done with this when I started with pythonista.

                  (We could do with a 'thanks' button on here.)

                  1 Reply Last reply Reply Quote 0
                  • pudquick51
                    pudquick51 last edited by

                    You're welcome :)

                    1 Reply Last reply Reply Quote 0
                    • DanG170
                      DanG170 last edited by

                      This is handy, thanks for sharing!

                      Is there a way to get sub directories to show up in the Library view?

                      1 Reply Last reply Reply Quote 0
                      • pudquick51
                        pudquick51 last edited by

                        @DanG - if you're talking about the script list GUI in Pythonista, omz would have to add that. The script list only shows files directly inside it ending in .py.

                        1 Reply Last reply Reply Quote 0
                        • omz
                          omz last edited by

                          @DanG @pudquick The library view will also show directories in the next update (1.3).

                          1 Reply Last reply Reply Quote 0
                          • Cubbarooney104
                            Cubbarooney104 last edited by

                            Took me a few minutes to get used to it, but once I did I found it VERY useful! Now I can manage those files. :) Thank you!

                            Cubbarooney

                            1 Reply Last reply Reply Quote 0
                            • justinclift244
                              justinclift244 last edited by

                              @pudquick - Thanks Michael, this is very cool. Shell prompt with no need to jailbreak. :)

                              The thing I'm missing most so far is "-la" on ls. Not being able to see file ownership, permissions, size, and date, is a bit frustrating.

                              But, I suppose if I get frustrated enough I'll fix it myself. :)

                              1 Reply Last reply Reply Quote 0
                              • pudquick51
                                pudquick51 last edited by

                                I'll add in the permissions bit, possibly, but considering that Pythonista on iOS can't launch a +x file / executable anyways ... I'm not sure what it is you're caring about in regards to permissions/modes.

                                1 Reply Last reply Reply Quote 0
                                • briarfox
                                  briarfox last edited by

                                  @pudquick I've been using shellista extensively for moving files around as the Pythonista move to function is rather slow when you begin to accumulate lots of projects.

                                  I've extended shellista with

                                  • zip
                                  • gzip
                                  • tar
                                  • wget
                                  • mail.

                                  I'm working on adding multi-file gist support with gist. The prompt also now shows the current working directory. I found this to be easier when working with files. Do you have a github repository for shellista? Would you mind if I shared my extended Shellista?

                                  1 Reply Last reply Reply Quote 0
                                  • ihf
                                    ihf last edited by

                                    where can I find the latest and greatest shellista?

                                    1 Reply Last reply Reply Quote 0
                                    • dgelessus
                                      dgelessus last edited by

                                      We don't yet have a Shellista Git, do we? In that case the newest version is the gist linked in the OP.

                                      By the way, there seems to be a bug when working with the file system root (/) as a path. Due to how the path handling is coded, the single slash will get rstriped away, leaving only a n empty string and causing problems. This should be easy to fix by replacing the rstrip() with os.path.normpath(), which works as expected on /.

                                      1 Reply Last reply Reply Quote 0
                                      • ihf
                                        ihf last edited by

                                        @briarfox I was looking for your extended version.

                                        1 Reply Last reply Reply Quote 0
                                        • transistor1
                                          transistor1 last edited by

                                          Thanks @pudquick for the awesome shellista module.

                                          I added pipista integration and basic Git integration into shellista: https://github.com/transistor1/shellista

                                          • Integrate minimal pipista functionality
                                            • pdown - PyPi download
                                            • psrch - PyPi search
                                          • Minimal Git functionality
                                          • git init - Initialize git repo
                                          • git add - Stage one or more files
                                          • git commit - Commit staged files
                                          • git clone - clone a public repo (no auth)
                                          • git push - push commits via web
                                          • git modified - see which files are currently modified
                                          • git log - doesn't currently work
                                          • untgz - a convenience wrapper to untar and ungzip at the same time
                                          • Also ripped @mark_tully's wget - thanks Mark!
                                          • Simple Python sub-shell by typing 'shell', 'python', or '!'
                                          • Running a file directly doesn't work (e.g. 'python somefile.py'), though I tried
                                          • Single-line commands only

                                          It should automatically download all the needed requirements. It uses Gittle with Dulwich to manage the Git functionality. Contributions welcome!

                                          I pushed the code directly to GitHub from my iPad with the git extensions.

                                          1 Reply Last reply Reply Quote 0
                                          • ccc
                                            ccc last edited by

                                            I am so happy to see that this is now a GitHub repo instead of a gist so that this community can all collaborate on making one Shellista better instead of dealing with divergent code bases.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Powered by NodeBB Forums | Contributors