/usr/share/fish/functions/alias.fish is in fish-common 2.2.0-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | function alias --description "Legacy function for creating shellscript functions using an alias-like syntax"
if count $argv >/dev/null
switch $argv[1]
case -h --h --he --hel --help
__fish_print_help alias
return 0
end
end
set -l name
set -l body
set -l prefix
set -l first_word
switch (count $argv)
case 0
echo "Fish implements aliases using functions. Use 'functions' builtin to see list of functions and 'functions function_name' to see function definition, type 'help alias' for more information."
return 1
case 1
# Some seds (e.g. on Mac OS X), don't support \n in the RHS
# Use a literal newline instead
# http://sed.sourceforge.net/sedfaq4.html#s4.1
# The extra '' at the end is so $tmp[2] is guaranteed to work
set -l tmp (echo $argv|sed -e 's/\([^=]\{0,1\}\)=/\1\
/') ''
set name $tmp[1]
set body $tmp[2]
case 2
set name $argv[1]
set body $argv[2]
case \*
printf ( _ "%s: Expected one or two arguments, got %d\n") alias (count $argv)
return 1
end
# sanity check
if test -z "$name"
printf ( _ "%s: Name cannot be empty\n") alias
return 1
else if test -z "$body"
printf ( _ "%s: Body cannot be empty\n") alias
return 1
end
# Extract the first command from the body
switch $body
case \*\ \* \*\t\*
# note: strip leading spaces if present
set first_word (echo $body|sed -e 's/^[[:space:]]\{1,\}//;s/[[:space:]].*//;q')
case '*'
set first_word $body
end
# Prevent the alias from immediately running into an infinite recursion if
# $body starts with the same command as $name.
if test $first_word = $name
if contains $name (builtin --names)
set prefix builtin
else
set prefix command
end
end
eval "function $name --wraps $first_word; $prefix $body \$argv; end"
end
|