Есть ли хороший способ заменить домашний каталог на тильду в bash?

Я пытаюсь работать с путем и заменить домашний каталог тильдой в bash, я надеюсь сделать это с помощью как можно меньшего количества внешних программ. Есть ли способ сделать это только с помощью bash. Я получил

${PWD/#$HOME/\~}

Но это не совсем так. Его необходимо преобразовать:

/home/alice to ~
/home/alice/ to ~/
/home/alice/herp to ~/herp
/home/alicederp to /home/alicederp

В качестве примечания, вот как исходный код bash делает это при преобразовании значения \w в приглашении :

/* Return a pretty pathname.  If the first part of the pathname is
   the same as $HOME, then replace that with `~'.  */
char *
polite_directory_format (name)
     char *name;
{
  char *home;
  int l;

  home = get_string_value ("HOME");
  l = home ? strlen (home) : 0;
  if (l > 1 && strncmp (home, name, l) == 0 && (!name[l] || name[l] == '/'))
    {
      strncpy (tdir + 1, name + l, sizeof(tdir) - 2);
      tdir[0] = '~';
      tdir[sizeof(tdir) - 1] = '\0';
      return (tdir);
    }
  else
    return (name);
}

23
задан Joel Purra 10 December 2012 в 00:51
поделиться