mirror of
https://github.com/systemd/systemd.git
synced 2024-11-07 09:56:51 +03:00
29a753df76
This new output mode formats all timestamps using the usual format_timestamp() call we use pretty much everywhere else. Timestamps formatted this way are some ways more useful than traditional syslog timestamps as they include weekday, month and timezone information, while not being much longer. They are also not locale-dependent. The primary advantage however is that they may be passed directly to journalctl's --since= and --until= switches as soon as #3869 is merged. While we are at it, let's also add "short-unix" to shell completion.
124 lines
5.5 KiB
Bash
124 lines
5.5 KiB
Bash
# journalctl(1) completion -*- shell-script -*-
|
|
#
|
|
# This file is part of systemd.
|
|
#
|
|
# Copyright 2010 Ran Benita
|
|
#
|
|
# systemd is free software; you can redistribute it and/or modify it
|
|
# under the terms of the GNU Lesser General Public License as published by
|
|
# the Free Software Foundation; either version 2.1 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# systemd is distributed in the hope that it will be useful, but
|
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
# General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Lesser General Public License
|
|
# along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
__contains_word () {
|
|
local w word=$1; shift
|
|
for w in "$@"; do
|
|
[[ $w = "$word" ]] && return
|
|
done
|
|
}
|
|
|
|
__get_machines() {
|
|
local a b
|
|
(machinectl list-images --no-legend --no-pager; machinectl list --no-legend --no-pager; echo ".host") | \
|
|
{ while read a b; do echo " $a"; done; } | sort -u;
|
|
}
|
|
|
|
__syslog_priorities=(emerg alert crit err warning notice info debug)
|
|
|
|
_journalctl() {
|
|
local field_vals= cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
|
|
local -A OPTS=(
|
|
[STANDALONE]='-a --all --full --system --user
|
|
--disk-usage -f --follow --header
|
|
-h --help -l --local --new-id128 -m --merge --no-pager
|
|
--no-tail -q --quiet --setup-keys --this-boot --verify
|
|
--version --list-catalog --update-catalog --list-boots
|
|
--show-cursor --dmesg -k --pager-end -e -r --reverse
|
|
--utc -x --catalog --no-full --force --dump-catalog
|
|
--flush --rotate --sync'
|
|
[ARG]='-b --boot --this-boot -D --directory --file -F --field
|
|
-M --machine -o --output -u --unit --user-unit -p --priority
|
|
--vacuum-size --vacuum-time'
|
|
[ARGUNKNOWN]='-c --cursor --interval -n --lines -S --since -U --until
|
|
--after-cursor --verify-key -t --identifier
|
|
--root'
|
|
)
|
|
|
|
if __contains_word "$prev" ${OPTS[ARG]} ${OPTS[ARGUNKNOWN]}; then
|
|
case $prev in
|
|
--boot|--this-boot|-b)
|
|
comps=$(journalctl -F '_BOOT_ID' 2>/dev/null)
|
|
;;
|
|
--directory|-D)
|
|
comps=$(compgen -d -- "$cur")
|
|
compopt -o filenames
|
|
;;
|
|
--file)
|
|
comps=$(compgen -f -- "$cur")
|
|
compopt -o filenames
|
|
;;
|
|
--output|-o)
|
|
comps='short short-full short-iso short-precise short-monotonic short-unix verbose export json json-pretty json-sse cat'
|
|
;;
|
|
--field|-F)
|
|
comps=$(journalctl --fields | sort 2>/dev/null)
|
|
;;
|
|
--machine|-M)
|
|
comps=$( __get_machines )
|
|
;;
|
|
--priority|-p)
|
|
comps=${__syslog_priorities[*]}
|
|
;;
|
|
--unit|-u)
|
|
comps=$(journalctl -F '_SYSTEMD_UNIT' 2>/dev/null)
|
|
;;
|
|
--user-unit)
|
|
comps=$(journalctl -F '_SYSTEMD_USER_UNIT' 2>/dev/null)
|
|
;;
|
|
*)
|
|
return 0
|
|
;;
|
|
esac
|
|
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
|
|
return 0
|
|
fi
|
|
|
|
if [[ $cur = -* ]]; then
|
|
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
|
|
return 0
|
|
elif [[ $cur = *=* ]]; then
|
|
mapfile -t field_vals < <(journalctl -F "${prev%=}" 2>/dev/null)
|
|
COMPREPLY=( $(compgen -W '${field_vals[*]}' -- "${cur#=}") )
|
|
elif [[ $cur = /dev* ]]; then
|
|
compopt -o filenames
|
|
COMPREPLY=( $(compgen -f -- "${cur}") )
|
|
elif [[ $cur = /* ]]; then
|
|
# Append /dev/ to the list of completions, so that
|
|
# after typing /<TAB><TAB> the user sees /dev/ as one
|
|
# of the alternatives. Later on the rule above will
|
|
# take care of showing device files in /dev/.
|
|
mapfile -t field_vals < <(journalctl -F "_EXE" 2>/dev/null; echo '/dev/')
|
|
COMPREPLY=( $(compgen -W '${field_vals[*]}' -- "${cur}") )
|
|
if [[ "${COMPREPLY[@]}" = '/dev/' ]]; then
|
|
compopt -o filenames
|
|
COMPREPLY=( $(compgen -f -- "${cur}") )
|
|
fi
|
|
elif [[ $prev = '=' ]]; then
|
|
mapfile -t field_vals < <(journalctl -F "${COMP_WORDS[COMP_CWORD-2]}" 2>/dev/null)
|
|
COMPREPLY=( $(compgen -W '${field_vals[*]}' -- "$cur") )
|
|
else
|
|
mapfile -t field_vals < <(journalctl --fields 2>/dev/null)
|
|
compopt -o nospace
|
|
COMPREPLY=( $(compgen -W '${field_vals[*]}' -S= -- "$cur") )
|
|
fi
|
|
}
|
|
|
|
complete -F _journalctl journalctl
|