diff --git a/share/functions/__fish_print_service_names.fish b/share/functions/__fish_print_service_names.fish index 8b2926ed2..e216b7509 100644 --- a/share/functions/__fish_print_service_names.fish +++ b/share/functions/__fish_print_service_names.fish @@ -1,9 +1,13 @@ function __fish_print_service_names -d 'All services known to the system' - if test -d /run/systemd/system - command systemctl list-units -t service | cut -d ' ' -f 1 | grep '\.service$' | sed -e 's/\.service$//' - else if type -f rc-service 2> /dev/null + if test -d /run/systemd/system # Systemd systems + # For the `service` command, this needs to be without the type suffix + # on Debian at least + __fish_systemctl_services | string replace -r '.service$' '' + else if type -f rc-service ^/dev/null # OpenRC (Gentoo) command rc-service -l - else - command ls /etc/init.d + else if test -d /etc/init.d # SysV on Debian and other linuxen + string replace '/etc/init.d/' '' -- /etc/init.d/* + else # Freebsd + command service -l end end