You have to “escape the shell” by enclosing the folder name in quotes, like mkdir “Istara files” or use the escape character (a backslash), like mkdir Istara\ files.
This also works in a Windows cmd window. Although it can work without the quotes for certain commands, some programs will treat the filename as seperate arguments if quotes aren’t used.
There are other characters you have to do that with as well.
The only disallowed character is a front slash, since that is the path seperator. You usually have to escape the space, backslash, hash mark (#), ampersand, star (*), parenthesis, pipe (|), semicolon, angle brackets (< and >), backtick (`), tilde (~), double quote, and single quote characters. Keep in mind that you can’t escape the double quote with a double quote, so if you feel the need to make a filename with that character you have to use the backslash to escape it. You can, however escape the backslash with a preceding backslash.
Also, you can use the tab-completion to see how the shell does it. Type in part of a filename and press tab. If the shell can figure out what file you want, it will fill it in. If the shell has several candidates that match what you typed, it will show all the possibilities and beep, prompting you to fill in the rest. If the shell can’t find what you typed at all, it will beep without showing anything. If you do this to one of your space-containing filenames or other special character filenames, you will see where it escapes them with backslashes.
Note that a few shells do not support auto-completion. Bourne shell is the only one I can think of. I’ve never seen a Linux distro where it is the default, but it is in FreeBSD except for the superuser. The superuser uses csh, which will do auto-completion if there’s only one possibility, but will not print multiple possibilities. Bash will display multiple possibilities. Zsh will even let you toggle through the various possibilities if you repeatedly press tab. So it varies significantly.
Odd for what’s essentially a BSD, but MacOS X has never been the average BSD, now has it?
(Personally, I think more distros and OSes should move to zsh as the default shell. It’s bash-compatible, it has a hell of a lot more features without being bloated on today’s powerful machines, and it’s released under the same terms as bash (the GPL). It’s very much an evolutionary change, like going from sh to bash.)
What’s really fun is when you’re scripting shell commands from another environment that uses the same escape characters (e.g., AppleScript): to send an escape character you have to escape the escape!
Very helpful hint here: if you generally get rid of useless Windows icons (like the Command Prompt) icon, but still use the Start->Run command to start shells, note that in 2000 and XP, typing “command” no longer works properly. It’s correct to use “cmd” now. It took me two years (!!!) of frustration with not being able to escape or quote around anything before I found this out.
Wow. I had never even heard of “bash” before, and only vaguely heard of “shell” but didn’t specifically know what it was, other than a text way to use the internet.
It has nothing to do with the Internet specifically. In Unix jargon, a “shell” is a textual, command-line interface to the operating system’s services. Even a machine unconnected to the Net will have a shell or two available. (Unless some mischievous person has deleted all the executables.)
From the BSD UNIX side, yes. From the MacOS X side, the only disallowed character is the colon (:), which was the path separator from the original MacOS System/Finder. I imagine the file system does some translating between the two automagically, though I’ve been too lazy to check.
The Finder changes front slashes to colons, and colons to front slashes. The Finder, or any other app, will never save a file whose true name contains a front slash. It’s impossible, as the low-level IO functions simply don’t work that way. They’ll intepret the slash as a subdirectory in which the file is being placed.
Oh is it ever! I have written an application at work that allows administrators to change the behavior of CGI programs via a CGI program. I have some routines where a CGI app takes info, makes a call to the shell to modify an existing CGI app which then has to generate dynamic output. You get great lines like
print "Hello World!\\\\\
";
:mad:
Missing one backslash has some strange side effects.
It’s reserved on Linux, too, and Linux is not a BSD in any way. I can’t imagine it not being reserved on any Unix except one with a history as odd as MacOS X.
If that’s happened, you won’t even be able to login. (Yes, login is a seperate program. And due to the magic of one-way hashes, it does not need to know your actual password.)