Offline
Online
Viewers

Windows 10 BASH: Tips and Tricks

I’ve been using the Windows 10 BASH shell for quite a while now forcing myself to get used to it. Along the way I’ve figured out a few working arounds for features such as sshfs and simple copy paste commands. First, the copy paste. When I first started using the Windows BASH shell I found it very frustrating when trying the copy and paste using the CTRL-C and CTRL-V commands. As any Linux user will tell you, these are kill commands and it doesn’t really make sense to use them. However, I did find another set of commands which work much better, here they are.

COPY: Select text, hit ENTER.
PASTE: Right click

So much easier than trying to fiddle with CTRL commands which are sometimes working and sometimes not.

Now let’s talk about sshfs, at the time of this writing FUSE support was not part of the Windows 10 BASH shell. There is/was however a petition to get it introduced, if it’s still not included and you would like to help, vote it up using the link below.

Windows 10 BASH FUSE Support

So, how did I get something similar to sshfs working, simple I put together a couple of shell scripts that utilize rsync and here’s the gist.  Basically what we want is a way to pull all the files we want to modify locally, use an editor to modify files and when the files are modified, push them back up to the server.  To do this, I created 3 BASH shell scripts named “pull”, “push” and “watcher”.  First the pull script, this script performs an incremental rsync pulling the remote files locally into a directory of your choosing.  The “pull” file looks like this:

[codesyntax lang=”bash”]

#!/bin/sh

rsync -au --progress user@someserver:/path/to/remote/directory /path/to/local/directory

[/codesyntax]

 

The above requires that you pass change the “user@someserver” to your actual username and server name.  Also, the “/path/to/remote/directory” and “/path/to/local/directory” need to be changed to your specific files.  For my specific needs, I used something similar to the following:

root@myserver:/var/www/html/zf /mnt/c/Users/Jason/Documents/zf

You’ll noticed I have the end point of the rsync specified under the standard Windows file system, this is so I can use a native Windows editor (LightTable in my case) to edit the files.

Next, let’s look at the “push” file.  The “push” file looks like this:

[codesyntax lang=”bash”]

#!/bin/sh

rsync -au --progress /path/to/local/directory user@someserver:/path/to/remote/directory

[/codesyntax]

 

The above is very similar to the “pull” file, just in reverse. This will do an incremental push only for files that have changed.

Lastely let’s look at the “watcher” file:

[codesyntax lang=”bash”]

#!/bin/sh

while ./pull && ./push;do : ;done

[/codesyntax]

 

The above file continually attempts to do an incremental rsync push until you kill it (Ctrl-C). After you’ve customized the above files to your liking, all you need to do is execute a pull then execute the watcher, and you’ll have yourself a poor man’s sshfs.

./watcher

 

As an optimization approach, you can also add –exclude directives to the “pull” file which will ignore files and directories, for example:

[codesyntax lang=”bash”]

#!/bin/sh

rsync -au --progress --exclude .svn --exclude .git user@someserver:/path/to/remote/directory /path/to/local/directory

[/codesyntax]

4 Comments

  1. Thanks for the pull/push scripts. I just got Windows 10 bash integrated with Visual Studio Code so your scripts come handy. I haven’t tried it yet but I am just wondering if it’s possible to do a push to remote as soon as a file has changed locally?

    1. Hi Tomas,

      Glad it helped. Sure, I do what you’re asking about all the time. Here’s an example of something you could use:

      while rsync -ua --progress $LOCAL/* $1:$REMOTE;do : ;done

      This command will find all changes under your LOCAL and copy them out to the REMOTE. I use this as a poor man’s fsmount.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Affiliates