Since switching to z shell (zsh) we've run into a variety of issues with globbing1 and other features not working the way we were used to with bash. This post is about resolving another of those issues. For example, while trying to scp
some cachegrind files from a remote box the following error was encountered:
scp server-local:/var/www/server/cacheg* ~/Documents/cachegrinds
usage: scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program]
[[user@]host1:]file1 ... [[user@]host2:]file2
Basically scp is telling us we were using it incorrectly. After doing some searching around we found the following information on the zsh mailing list.
I suspect that you just want
setopt no_nomatch
so that the glob pattern
is left unexpanded when it doesn't find any matching files. (You may have
to unsetopt null_glob csh_null_glob
as well.) That's the only way I can
think of that this would do as you seem to expect in bash but not in zsh.
After trying the first option—setopt no_nomatch
—my command still errored out. The second one—unsetopt null_glob csh_null_glob
— did allow me to type in my unmodified scp command and download my cachegrind files. However, we never like the idea of just typing in random commands without knowing what they do. Before making the change persistent we decided to do a little reading on the null_glob
option. After doing that we didn't really think turning this on was the best option, so we decided to use the other alternative from the mailing list post.
I could just put single quotes around the server path to get it to
work with globbing but after many years of bash I am having trouble getting into the habbit of using single quotes with scp and it get's pretty frustrating.
That's what we decided to do, and lo, it paid off. Globbing worked as expected.
scp server-local:'/var/www/server/cacheg*' ~/Documents/cachegrinds
cachegrind.out.1426 100% 2578 2.5KB/s 00:00
cachegrind.out.1427 100% 2574 2.5KB/s 00:00
cachegrind.out.1428 100% 9233KB 9.0MB/s 00:00
cachegrind.out.1430 100% 2574 2.5KB/s 00:00
cachegrind.out.1598 100% 2574 2.5KB/s 00:00
cachegrind.out.1600 100% 3021KB 3.0MB/s 00:00
cachegrind.out.1602 100% 2174KB 2.1MB/s 00:00
cachegrind.out.1604 100% 30KB 30.4KB/s 00:00
cachegrind.out.1605 100% 2575 2.5KB/s 00:00
cachegrind.out.1778 100% 235 0.2KB/s 00:00
cachegrind.out.1919 100% 9190KB 9.0MB/s 00:00
cachegrind.out.1927 100% 2174KB 2.1MB/s 00:00
cachegrind.out.2021 100% 233 0.2KB/s 00:00
cachegrind.out.2157 100% 2574 2.5KB/s 00:00
cachegrind.out.2293 100% 233 0.2KB/s 00:00
cachegrind.out.2302 100% 2578 2.5KB/s 00:00
cachegrind.out.2346 100% 233 0.2KB/s 00:00
cachegrind.out.2393 100% 233 0.2KB/s 00:00
cachegrind.out.2428 100% 233 0.2KB/s 00:00
cachegrind.out.2445 100% 2443 2.4KB/s 00:00
cachegrind.out.2954 100% 233 0.2KB/s 00:00
cachegrind.out.3139 100% 233 0.2KB/s 00:00
cachegrind.out.3170 100% 233 0.2KB/s 00:00
cachegrind.out.3278 100% 233 0.2KB/s 00:00