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 " " $NF
imprime 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.) . -
sep
está 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
echo
no 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.