id = "pdsh"
name = "pdsh"
homepage = "https://github.com/chaos/pdsh"
description = "Efficient rsh-like utility for using hosts in parallel."
executables = ["pdsh", "pdcp", "dshbak"]
[dotfiles]
paths = ["~/.dsh/group/"]
secret = []
[commands]
format = 1
label = "Run a command on many hosts"
description = "Run one command in parallel on hosts selected with -w/-x. Module-specific selection (genders, SLURM, netgroup), rcmd module choice and AIX options are left out."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = false, short_attached = true, short_bundles = true }
[[commands.source]]
id = "man"
kind = "manual"
url = "https://manpages.debian.org/unstable/pdsh/pdsh.1.en.html"
revision = "2026-10-27"
evidence = """
pdsh [options]... command
-w TARGETS,... Target and or filter the specified list of hosts.
-x host,host,... Exclude the specified hosts.
-S Return the largest of the remote command return values.
-k Fail fast on connect failure or non-zero return code.
-q List option values and the target nodelist and exit without action.
-b Disable ctrl-C status feature so that a single ctrl-C kills parallel job. (Batch Mode)
-l user This option may be used to run remote commands as another user, subject to authorization.
-t seconds Set the connect timeout. Default is 10 seconds.
-u seconds Set a limit on the amount of time a remote command is allowed to execute. Default is no limit.
-f number Set the maximum number of simultaneous remote commands to number. The default is 32.
-N Disable hostname: prefix on lines of output.
"""
[[commands.field]]
id = "targets"
label = "Target hosts"
description = "Comma-separated host names or hostlist ranges such as node[1-4]; no spaces."
type = "string"
option = ["-w"]
sources = ["man"]
[[commands.field]]
id = "exclude"
label = "Exclude hosts"
type = "string"
option = ["-x"]
sources = ["man"]
[[commands.field]]
id = "user"
label = "Remote user"
type = "string"
option = ["-l"]
sources = ["man"]
[[commands.field]]
id = "connect_timeout"
label = "Connect timeout (seconds)"
type = "integer"
option = ["-t"]
min = 1
sources = ["man"]
[[commands.field]]
id = "command_timeout"
label = "Command time limit (seconds)"
type = "integer"
option = ["-u"]
min = 1
sources = ["man"]
[[commands.field]]
id = "fanout"
label = "Max simultaneous commands"
type = "integer"
option = ["-f"]
min = 1
sources = ["man"]
[[commands.field]]
id = "no_prefix"
label = "Hide hostname prefix"
type = "boolean"
option = ["-N"]
sources = ["man"]
[[commands.field]]
id = "fail_fast"
label = "Fail fast"
type = "boolean"
option = ["-k"]
sources = ["man"]
[[commands.field]]
id = "max_status"
label = "Return largest exit status"
type = "boolean"
option = ["-S"]
sources = ["man"]
[[commands.field]]
id = "batch"
label = "Batch mode (single Ctrl-C kills job)"
type = "boolean"
option = ["-b"]
sources = ["man"]
[[commands.field]]
id = "list_only"
label = "List targets only, do not run"
type = "boolean"
option = ["-q"]
sources = ["man"]
[[commands.field]]
id = "command"
label = "Command"
description = "Command to run on every selected host."
type = "string"
position = 0
min = 1
sources = ["man"]
[[commands.task]]
id = "run"
label = "Run on hosts"
fields = ["targets", "exclude", "user", "no_prefix", "command"]
required = ["targets", "command"]
[[commands.task]]
id = "preview"
label = "Preview targets"
fields = ["targets", "exclude", "list_only", "command"]
required = ["targets", "command"]
set = { list_only = [true] }
[[commands.group]]
id = "basic"
label = "Basic"
fields = ["targets", "exclude", "user", "command", "no_prefix", "list_only"]
[[commands.group]]
id = "advanced"
label = "Advanced"
fields = ["connect_timeout", "command_timeout", "fanout", "fail_fast", "max_status", "batch"]