2020-05-21 19:33:17 +08:00
|
|
|
# RUN: %fish %s
|
|
|
|
#
|
|
|
|
# This deals with $PATH manipulation. We need to be careful not to step on anything.
|
|
|
|
|
|
|
|
set -l tmpdir (mktemp -d)
|
|
|
|
mkdir $tmpdir/bin
|
|
|
|
mkdir $tmpdir/sbin
|
|
|
|
mkdir $tmpdir/etc
|
|
|
|
ln -s $tmpdir/bin $tmpdir/link
|
|
|
|
|
|
|
|
# We set fish_user_paths to an empty global to have a starting point
|
|
|
|
set -g fish_user_paths
|
|
|
|
fish_add_path -v $tmpdir/bin
|
|
|
|
# CHECK: set fish_user_paths {{.*}}/bin
|
|
|
|
echo $status
|
|
|
|
# CHECK: 0
|
|
|
|
|
|
|
|
# Confirm that it actually ends up in $PATH
|
|
|
|
contains -- (builtin realpath $tmpdir/bin) $PATH
|
|
|
|
and echo Have bin
|
|
|
|
# CHECK: Have bin
|
|
|
|
|
|
|
|
# Not adding duplicates and not triggering variable handlers
|
|
|
|
function checkpath --on-variable PATH --on-variable fish_user_paths; echo CHECKPATH: $argv; end
|
|
|
|
set PATH $PATH
|
|
|
|
# CHECK: CHECKPATH: VARIABLE SET PATH
|
|
|
|
fish_add_path -v $tmpdir/bin
|
|
|
|
# Nothing happened, so the status failed.
|
|
|
|
echo $status
|
|
|
|
# CHECK: 1
|
|
|
|
functions --erase checkpath
|
|
|
|
|
2020-09-13 01:28:01 +08:00
|
|
|
# Add a link to the same path.
|
2020-05-21 19:33:17 +08:00
|
|
|
fish_add_path -v $tmpdir/link
|
2020-09-13 01:28:01 +08:00
|
|
|
# CHECK: set fish_user_paths {{.*}}/link {{.*}}/bin
|
2020-05-21 19:33:17 +08:00
|
|
|
echo $status
|
2020-09-13 01:28:01 +08:00
|
|
|
# CHECK: 0
|
2020-05-21 19:33:17 +08:00
|
|
|
|
|
|
|
fish_add_path -a $tmpdir/sbin
|
|
|
|
# Not printing anything because it's not verbose, the /sbin should be added at the end.
|
|
|
|
string replace -- $tmpdir '' $fish_user_paths | string join ' '
|
2020-09-13 01:28:01 +08:00
|
|
|
# CHECK: /link /bin /sbin
|
2020-05-21 19:33:17 +08:00
|
|
|
|
|
|
|
fish_add_path -m $tmpdir/sbin
|
|
|
|
string replace -- $tmpdir '' $fish_user_paths | string join ' '
|
2020-09-13 01:28:01 +08:00
|
|
|
# CHECK: /sbin /link /bin
|
2020-05-21 19:33:17 +08:00
|
|
|
|
|
|
|
set -l oldpath "$PATH"
|
|
|
|
fish_add_path -nP $tmpdir/etc | string replace -- $tmpdir ''
|
|
|
|
# Should print a set command to prepend /etc to $PATH, but not actually do it
|
|
|
|
# CHECK: set PATH /etc{{.*}}
|
|
|
|
|
|
|
|
# Confirm that $PATH didn't change.
|
|
|
|
test "$oldpath" = "$PATH"
|
|
|
|
or echo "PATH CHANGED!!!" >&2
|
|
|
|
|
|
|
|
exit 0
|