sh: Use $PWD instead of getcwd() for the \w and \W prompt expansions.
This ensures that the logical working directory (which may include symlinks) is shown and is similar to the default behaviour of the pwd builtin.
This commit is contained in:
parent
778c4480f4
commit
c9c987cd35
@ -1734,7 +1734,8 @@ getprompt(void *unused __unused)
|
||||
{
|
||||
static char ps[PROMPTLEN];
|
||||
char *fmt;
|
||||
int i, j, trim;
|
||||
const char *pwd;
|
||||
int i, trim;
|
||||
static char internal_error[] = "<internal prompt error>";
|
||||
|
||||
/*
|
||||
@ -1785,17 +1786,15 @@ getprompt(void *unused __unused)
|
||||
*/
|
||||
case 'W':
|
||||
case 'w':
|
||||
ps[i] = '\0';
|
||||
getcwd(&ps[i], PROMPTLEN - i);
|
||||
if (*fmt == 'W' && ps[i + 1] != '\0') {
|
||||
/* Final path component only. */
|
||||
trim = 1;
|
||||
for (j = i; ps[j] != '\0'; j++)
|
||||
if (ps[j] == '/')
|
||||
trim = j + 1;
|
||||
memmove(&ps[i], &ps[trim],
|
||||
j - trim + 1);
|
||||
}
|
||||
pwd = lookupvar("PWD");
|
||||
if (pwd == NULL)
|
||||
pwd = "?";
|
||||
if (*fmt == 'W' &&
|
||||
*pwd == '/' && pwd[1] != '\0')
|
||||
strlcpy(&ps[i], strrchr(pwd, '/') + 1,
|
||||
PROMPTLEN - i);
|
||||
else
|
||||
strlcpy(&ps[i], pwd, PROMPTLEN - i);
|
||||
/* Skip to end of path. */
|
||||
while (ps[i + 1] != '\0')
|
||||
i++;
|
||||
|
Loading…
Reference in New Issue
Block a user