Because it is impossible to consistently keep symlinked directories unresolved. It is indeed possible to do this partially, and many other shells do so. But it was felt there are enough serious corner cases that this is a bad idea. Most such issues have to do with how '..' is handled, and are varitations of the following example:
Writing cd images; ls ..
given the above directory structure would list the contents of ~/Documents, not of ~, even though using cd ..
changes the current directory to ~, and the prompt, the pwd builtin and many other directory information sources suggest that the current directory is ~/images and its parent is ~. This issue is not possible to fix without either making every single command into a builtin, breaking Unix semantics or implementing kludges in every single command.
This issue can also be seen when doing IO redirection.
Another related issue is that many programs that operate on recursive directory trees, like the find command, silently ignore symlinked directories. For example, find $PWD -name '*.txt'
silently fails in shells that don't resolve symlinked paths.
~
and enter.
open
command uses the MIME type database and the .desktop
files used by Gnome and KDE to identify filetypes and default actions. If at least one of these environments is installed, but the open command is not working, this probably means that the relevant files are installed in a non-standard location. Consider asking for more help.
echo /usr/local/bin/fish >>/etc/shells
If you installed a prepackaged version of fish, the package manager should have already done this for you.
In order to change your default shell, type:
chsh -s /usr/local/bin/fish
You may need to adjust the above path to e.g. /usr/bin/fish
. Use the command which fish
if you are unsure of where fish is installed.
Unfortunately, there is no way to make the changes take effect at once. You will need to log out and back in again.
Run the following command in fish:
echo 'function fish_title;end' > ~/.config/fish/config.fish
Problem solved!
The long answer:
Fish is trying to set the titlebar message of your terminal. While screen itself supports this feature, your terminal does not. Unfortunately, when the underlying terminal doesn't support setting the titlebar, screen simply passes through the escape codes and text to the underlying terminal instead of ignoring them. It is impossible detect and resolve this problem from inside fish since fish has no way of knowing what the underlying terminal type is. For now, the only way to fix this is to unset the titlebar message, as suggested above.
Note that fish has a default titlebar message, which will be used if the fish_title function is undefined. So simply unsetting the fish_title function will not work.
set fish_greeting
Fish history recall is very simple yet effective:
See documentation for more details about line editing in fish.
chsh -s /bin/bash
if you are not sure.Next, do the following (assuming fish was installed to /usr/local):
rm -Rf /usr/local/etc/fish /usr/local/share/fish ~/.config/fish rm /usr/local/share/man/man1/fish*.1 cd /usr/local/bin rm -f fish mimedb fish_pager fishd fish_indent