Tag Archives: bash

How To: Run Arch Linux on Windows 10

Windows 10 has the ability to run a Linux subsystem.  However, you can now run Arch Linux instead of the default Debian thanks to some great work by “turbo” at github.com.  Here’s the skinny on getting this setup.

First, download the alwsl.bat file from: https://github.com/alwsl/alwsl

Next, open a command Windows command prompt and execute the following:

alwsl install

Follow the steps provided by the batch file and voila! Arch Linux on Windows.

Lastly, just open ArchLinux from the Windows menu and enjoy.

I’ve noticed using Arch Linux instead of Debian on Windows appears to have some performance gains, especially around the usage of Vim and other console editors.

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:

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


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:

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


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:

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


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.

user@computer:$ ./watcher


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

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

SVN and VIMDIFF – Now Play Nice

I use svn quite frequently however, the standard diff tool built in with svn leaves a lot to be desired.  Its output reminiscent of a command line patch.  Personally, I love vimdiff (or vim -d if you prefer) when it comes to comparing files.  Recently I hooked vimdiff into svn diff, now I get all the power and love of vimdiff by executing “svn diff …”.  Here’s how I did it.

First create a wrapper file called “svndiff”.  You’re going to want to do this so you can ensure everything gets displayed the way you want it to.  I created mine in the home directory.

touch /home/godlikemouse/svndiff

Next let’s edit the file and tell it what to do with the information that will be passed to it from svn.



/usr/bin/vimdiff ${7} ${6}


I like to have my local working copy displayed on the left and the remote or svn copy on the right.  If you like yours the other way around, just reverse the last two parameters to: ${6} ${7}.

Next we need to make the script executable.

chmod a+x /home/godlikemouse/svndiff

Lastly, we need to tell svn to use this file instead of its own built in diff.  To do so, edit the “.subversion/config” file located in your home directory (ie. /home/godlikemouse/.subversion/config).

Find the section labelled [helpers] and add the following command:

diff-cmd = /home/godlikemouse/svndiff

That’s pretty much all there is to it, now when you execute a command like “svn diff index.php” it will use vimdiff or whatever diff program you prefer.

Just as an enhancement, I like to have my terminal title set to the working copy and revision of the file respectively.  If you would like the same, add the following to your svndiff file:


TITLE="${5} - ${3}"
TITLE=`echo ${TITLE//(/\\(}`
TITLE=`echo ${TITLE//)/\\)}`
TITLE=`echo ${TITLE// /\\ }`
TITLE=`echo ${TITLE//-/\\-}`
/usr/bin/vimdiff -c "set title titlestring=$TITLE" ${7} ${6}


There we go, nice and clean.  Now the title shows up perfectly showing the working copy of the file and the revision.  Party.