</listitem>
</varlistentry>
+ <varlistentry>
+ <term><option>--num-matches=<replaceable>NUMBER</replaceable></option></term>
+
+ <listitem>
+ <para>When used with the <command>monitor</command> command, if enabled will make
+ <command>busctl</command> exit when the specified number of messages have been received and
+ printed. This is useful in combination with <option>--match=</option>, to wait for the specified
+ number of occurrences of specific D-Bus messages.</para>
+
+ <xi:include href="version-info.xml" xpointer="v257"/>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
<term><option>--augment-creds=<replaceable>BOOL</replaceable></option></term>
static bool arg_watch_bind = false;
static usec_t arg_timeout = 0;
static const char *arg_destination = NULL;
+static uint64_t arg_num_matches = UINT64_MAX;
STATIC_DESTRUCTOR_REGISTER(arg_matches, strv_freep);
dump(m, stdout);
fflush(stdout);
+ if (arg_num_matches != UINT64_MAX && --arg_num_matches == 0) {
+ if (!arg_quiet && arg_json_format_flags == SD_JSON_FORMAT_OFF)
+ log_info("Received requested number of matching messages, exiting.");
+ return 0;
+ }
+
if (sd_bus_message_is_signal(m, "org.freedesktop.DBus.Local", "Disconnected") > 0) {
if (!arg_quiet && arg_json_format_flags == SD_JSON_FORMAT_OFF)
log_info("Connection terminated, exiting.");
" --watch-bind=BOOL Wait for bus AF_UNIX socket to be bound in the file\n"
" system\n"
" --destination=SERVICE Destination service of a signal\n"
+ " --num-matches=NUMBER Exit after receiving a number of matches while\n"
+ " monitoring\n"
"\nSee the %s for details.\n",
program_invocation_short_name,
ansi_highlight(),
ARG_WATCH_BIND,
ARG_JSON,
ARG_DESTINATION,
+ ARG_NUM_MATCHES,
};
static const struct option options[] = {
{ "watch-bind", required_argument, NULL, ARG_WATCH_BIND },
{ "json", required_argument, NULL, ARG_JSON },
{ "destination", required_argument, NULL, ARG_DESTINATION },
+ { "num-matches", required_argument, NULL, ARG_NUM_MATCHES },
{},
};
arg_destination = optarg;
break;
+ case ARG_NUM_MATCHES:
+ r = safe_atou64(optarg, &arg_num_matches);
+ if (r < 0)
+ return log_error_errno(r, "Failed to parse --num-matches= parameter '%s': %m", optarg);
+ if (arg_num_matches == 0)
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "--num-matches= parameter cannot be 0");
+
+ break;
+
case '?':
return -EINVAL;