On Wed, Feb 06, 2019 at 02:22:35PM +0900, John Crawley wrote: > On 06/02/2019 03.17, ghe wrote: > > On 2/5/19 9:19 AM, Jude DaShiell wrote: > > > Have you tried replacing "-" with \45 yet? That's the ascii equivalent > > > for "-'. > > > > Excellent idea. But: > > > > root@sbox:~# systemctl unmask \45.mount > > Unit 45.mount does not exist, proceeding anyway. > > > > (Same with quotes.) > > > You might try > root@sbox:~# systemctl unmask $'\45'.mount > Just a thought.
You're all just making stuff up without understanding it. First of all, the ASCII value of - is 45 decimal, or 055 octal, or 0x2d hexadecimal. If you use bash's $'\...' quoting syntax, you get to choose between octal and hexadecimal, the default being octal. So, $'\055' is equivalent to '-'. $'\45' is a percent sign. Second, whatever form of quoting you use in your shell command is simply a mechanism to make sure your intended arguments get passed to the command you're invoking. Once the shell has parsed your quoting, the quotes are removed. The command doesn't see them. As arguments, - and "-" and '-' and $'-' and $'\055' and $'\x2d' are all exactly the same. There is no difference at all. wooledg:~$ args - "-" '-' $'-' $'\055' $'\x2d' 6 args: <-> <-> <-> <-> <-> <-> The command (mount, umount, systemctl unmask, or whatever) does not know or care which kind of quoting, if any, you used in your shell. This is also why the classic Unix shell FAQ "how do I remove a file whose name starts with -" is such a puzzler for many people. People think that by quoting the leading - they will somehow make rm treat it as a filename instead of an option. But because of how shells *work*, the quotes are removed, and rm has no idea that you quoted it. Answer to the FAQ: you must tell rm that this argument is a filename and not an option. You do that by putting the end-of-options indicator -- before the filename. E.g. rm -- -myfile Another way to do it is to give rm a pathname that does not begin with a - character. E.g. rm ./-myfile The latter only works because the argument to rm *is* a pathname, and relative pathnames can have a leading ./ prepended to them without changing their meaning. Now, I don't know how systemctl unmask works. You can try putting -- before your unit argument, if the unit name truly begins with a -, and see if that helps. Or, you can try to figure out whether this is really the correct unit name at all. It seems rather dubious. Is there any chance that your fstab file is simply malformed, and is being converted into bogus .mount units? Maybe you should go through your /etc/fstab and look for errors.