Se você quiser uma saída como:
The following services are running: ntp, rsync, ssh,
Você pode usar awk para transformar a saída de service --status-all :
$ service --status-all | awk '/+/{printf "%s", sep " " $NF; sep=","}'
acpid, alsa-utils, apache-htcacheclean, apache2, apparmor, apport, atd, avahi-daemon, cron, cups-browsed, dbus, grub-common, irqbalance, keyboard-setup, kmod, lightdm, network-manager, networking, ondemand, procps, rc.local, resolvconf, rsyslog, speech-dispatcher, ssh, udev, ufw, urandom, whoopsie
Assim, o seu script ficaria assim:
#! /bin/sh
printf "The following services are running: "
service --status-all | awk '/+/{printf "%s", sep " " $NF; sep=","}'
echo
O comando awk é simples:
-
/+/corresponde a linhas com+. Normalmente,+significaria uma ou mais da expressão anterior. Mas, por si só,+significa apenas+. O awk executa o seguinte bloco{...}se esse padrão corresponder. -
printf "%s" sep " " $NFimprime o conteúdo da variávelsep, seguido por um espaço e seguido pelo último campo da linha (NFé o número de campos e$xé o conteúdo do campo x.) . -
sepestá vazio no início, então o primeiro serviço a ser impresso tem apenas um espaço antes dele. Agora eu definosep=",", então, na próxima linha, temos um,. - Isso não imprime uma nova linha, então eu uso um simples
echono final para imprimir um.
Agora use algo como isto: Execute o script no login do shell para todos os usuários para executar o script no login.