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] # The upstream pdsh README says the dshgroups module reads dsh-style group # files from ~/.dsh/group/groupname (and /etc/dsh/group/groupname). The latter # is system-wide and is intentionally outside this user's dotfiles. # https://github.com/chaos/pdsh#configuration 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"]