Finally got around to taking a look at WinSCP’s command-line options. Basically I just needed to specify a session name and that was it. Now I have a set of icons on my desktop for scping to my various servers. I even configured a shortcut key for servers I use often, so now all I need to do to get at my remote ProgClub files is press Ctrl+Alt+Shift+C.
Bash aliases for listing hidden files
I finally figured out the ls command to list hidden files, and decided to setup a ~/.bash_aliases file for the first time. My ~/.bash_aliases file is now:
alias l.='ls -d .[!.]*' alias ll.='ll -d .[!.]*'
So I have an “l.” command which will list hidden files and directories, and an “ll.” command which will list the same information in detail.
Keeping Your SSH Sessions Alive Through NAT Firewalls
I found this article Keeping Your SSH Sessions Alive Through Pesky NAT Firewalls which explained how to keep SSH connections alive through NAT firewalls. I’m behind a NAT router and my SSH connections are always timing out due to inactivity, and it annoys the shit out of me. I’ve been putting up with it for ages, and tonight I finally got around to searching for a solution. The solution is to edit your ~/.ssh/config file and add:
Host *
ServerAliveInterval 240
That will make the server send a keep-alive packet every four minutes, which out to do it. Haven’t tried it yet, but expect it will work. Will configure my systems now…
Update: that didn’t seem to work for me. :(
Maybe this is a client setting?
Anyway, I did some more research, and I found that PuTTY has a configuration option in the Connection settings “Sending of null packets to keep session active”, “Seconds between keepalives” which defaults to 0 (turned off). So I’m gonna try with that now.
Pcad ML
Setting a default value if a bash variable is undefined
Say you want to take an optional command line argument to your script. That means that maybe $1 is set to a value, or maybe it’s not. You can read out the value and assign a default in the case that $1 is not set using the syntax:
variable=${1:-default-value}
Which will set $variable to “default-value” if $1 is not set.
Bash syntax errors and exit status
I learned that in some circumstances bash will exit with exit status 0 after a syntax error in your script. I.e. when trap ERR is defined. That is so totally uncool.
Creating a temp file in bash
To create a new temporary file in bash use the mktemp command. E.g.:
path="$(mktemp)"
There’s a -d argument to mktemp that will make a temp directory.
Replacing new lines with nulls in bash
If you have a list of file names separated by new lines, and you want to turn it into a list of file names separated by null characters, for instance for use as input to xargs, then you can use the tr command, like this:
$ cat /path/to/new-lines | tr '\n' '\0' > /path/to/null-separated
I found a whole article on various ways to replace text on *nix: rmnl — remove new line characters with tr, awk, perl, sed or c/c++.
Extracting a single file from a tar archive
You can use a parameter to the -x command line switch to tell the tar command that you just want to extract one particular file from the archive. For example:
$ tar -x filename/to/extract -f tarfile.tar
You can use the -O command line switch in conjunction with the above to have the file’s contents printed on stdout rather than created in the file system.
Bash subshells
I read Chapter 21. Subshells of The Linux Documentation Project‘s Advanced Bash-Scripting Guide. One fun trick I learned was using a subshell to test if a variable is set:
if (set -u; : $variable) 2> /dev/null then echo "Variable is set." fi