mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-03 01:17:45 +03:00
d888ef68d1
This option has coredumpctl look at all journals instead of only the local ones. This allows coredumpctl to show information about remote coredumps if the coredumps are made available in /var/lib/systemd/coredump and the corresponding journals are made available in /var/log/journal. This is already possible using the --directory option but --all makes it more user friendly since users don't have to enter the journal directory anymore as long as it's available under /var/log/journal.
98 lines
3.6 KiB
Bash
98 lines
3.6 KiB
Bash
# coredumpctl(1) completion -*- shell-script -*-
|
|
# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
#
|
|
# 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
|
|
}
|
|
|
|
__journal_fields=(MESSAGE{,_ID} PRIORITY CODE_{FILE,LINE,FUNC}
|
|
ERRNO SYSLOG_{FACILITY,IDENTIFIER,PID} COREDUMP_EXE
|
|
_{P,U,G}ID _COMM _EXE _CMDLINE
|
|
_AUDIT_{SESSION,LOGINUID}
|
|
_SYSTEMD_{CGROUP,SESSION,UNIT,OWNER_UID}
|
|
_SELINUX_CONTEXT _SOURCE_REALTIME_TIMESTAMP
|
|
_{BOOT,MACHINE}_ID _HOSTNAME _TRANSPORT
|
|
_KERNEL_{DEVICE,SUBSYSTEM}
|
|
_UDEV_{SYSNAME,DEVNODE,DEVLINK}
|
|
__CURSOR __{REALTIME,MONOTONIC}_TIMESTAMP)
|
|
_coredumpctl() {
|
|
local i verb comps
|
|
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
|
|
local OPTS='-h --help --version --no-pager --no-legend -o --output -F --field -1
|
|
-r --reverse -S --since -U --until -D --directory -q --quiet --debugger
|
|
-A --debugger-arguments --json -n --all'
|
|
|
|
local -A VERBS=(
|
|
[LIST]='list info'
|
|
[DUMP]='dump debug'
|
|
)
|
|
|
|
if __contains_word "$prev" '--output -o'; then
|
|
comps=$( compgen -A file -- "$cur" )
|
|
compopt -o filenames
|
|
elif __contains_word "$prev" '-D --directory'; then
|
|
comps=$( compgen -A directory -- "$cur" )
|
|
compopt -o filenames
|
|
elif __contains_word "$prev" '--debugger'; then
|
|
comps=$( compgen -A command -- "$cur" )
|
|
compopt -o filenames
|
|
elif __contains_word "$prev" '--field -F'; then
|
|
comps=$( compgen -W '${__journal_fields[*]}' -- "$cur" )
|
|
elif __contains_word "$prev" '--json'; then
|
|
comps=$( compgen -W 'pretty short off' -- "$cur" )
|
|
elif [[ $cur = -* ]]; then
|
|
comps=${OPTS}
|
|
elif __contains_word "$prev" ${VERBS[*]} &&
|
|
! __contains_word ${COMP_WORDS[COMP_CWORD-2]} \
|
|
'--output -o -D --directory -F --field --debugger'; then
|
|
compopt -o nospace
|
|
COMPREPLY=( $(compgen -W '${__journal_fields[*]}' -S= -- "$cur") )
|
|
return 0
|
|
elif [[ $cur = *=* ]]; then
|
|
mapfile -t field_vals < <(coredumpctl -F "${prev%=}" 2>/dev/null)
|
|
COMPREPLY=( $(compgen -W '${field_vals[*]}' -- "${cur#=}") )
|
|
return 0
|
|
elif [[ $prev = '=' ]]; then
|
|
mapfile -t field_vals < <(coredumpctl -F "${COMP_WORDS[COMP_CWORD-2]}" 2>/dev/null)
|
|
comps=${field_vals[*]}
|
|
else
|
|
for ((i=0; i <= COMP_CWORD; i++)); do
|
|
if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]}; then
|
|
verb=${COMP_WORDS[i]}
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [[ -z ${verb-} ]]; then
|
|
comps=${VERBS[*]}
|
|
elif __contains_word "$verb" ${VERBS[LIST]} ${VERBS[DUMP]}; then
|
|
comps=''
|
|
fi
|
|
fi
|
|
|
|
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
|
|
return 0
|
|
}
|
|
|
|
complete -F _coredumpctl coredumpctl
|