The Scenario
A couple of terminals open, connected to a mix of your own workstation, local development servers and remote servers running on a different network and frequently behind a variety of security barriers.
You want to copy a smallish chunk of code from a file across the network, or the output of a diff to apply a patch – but characters like whitespace and newlines which should not change will frequently be modified through the copy. You end up with whitespace changes where you don’t want them (perhaps later causing source code control merges to fail, and patches will fail straight away).
base64 / base64 -d to the rescue
Use /usr/bin/base64 to make sure the data you copy between terminals remains unchanged.
For example – call base64 on a file to give you a safe-to-copy chunk of ASCII:
$ base64 example001 aGVsbG8gd29ybGQK
Which you can then get back with “base64 -d”:
$ echo aGVsbG8gd29ybGQK | base64 -d hello world
Or you can just transfer a patch, for example:
$ cat example001 hello world $ cat example002 hello all $ diff -u example001 example002 --- example001Â 2016-08-09 16:20:52.383813529 +1000 +++ example002Â 2016-08-09 16:21:08.675813172 +1000 @@ -1 +1 @@ -hello world +hello all $ diff -u example001 example002 | base64 LS0tIGV4YW1wbGUwMDEJMjAxNi0wOC0wOSAxNjoyMDo1Mi4zODM4MTM1MjkgKzEwMDAKKysrIGV4 YW1wbGUwMDIJMjAxNi0wOC0wOSAxNjoyMTowOC42NzU4MTMxNzIgKzEwMDAKQEAgLTEgKzEgQEAK LWhlbGxvIHdvcmxkCitoZWxsbyBhbGwK # And then in another terminal... $ cat | base64 -d | patch LS0tIGV4YW1wbGUwMDEJMjAxNi0wOC0wOSAxNjoyMDo1Mi4zODM4MTM1MjkgKzEwMDAKKysrIGV4 YW1wbGUwMDIJMjAxNi0wOC0wOSAxNjoyMTowOC42NzU4MTMxNzIgKzEwMDAKQEAgLTEgKzEgQEAK LWhlbGxvIHdvcmxkCitoZWxsbyBhbGwK patching file example001 $ cat example001 hello all
So long as the text is relatively small this allows you to safely transfer exactly the data you intended between terminals.
In a text editor like vi you can even just copy the base64 encoded data into the file you are editing, and then pipe the range including that base64 data through “base64 -d” to get the code chunk you need right where you need it.