{
  "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
    },
    "source": [
      {
        "id": "man",
        "kind": "manual",
        "url": "https://manpages.debian.org/unstable/pdsh/pdsh.1.en.html",
        "revision": "2026-10-27",
        "evidence": "pdsh [options]... command\n-w TARGETS,...  Target and or filter the specified list of hosts.\n-x host,host,...  Exclude the specified hosts.\n-S  Return the largest of the remote command return values.\n-k  Fail fast on connect failure or non-zero return code.\n-q  List option values and the target nodelist and exit without action.\n-b  Disable ctrl-C status feature so that a single ctrl-C kills parallel job. (Batch Mode)\n-l user  This option may be used to run remote commands as another user, subject to authorization.\n-t seconds  Set the connect timeout. Default is 10 seconds.\n-u seconds  Set a limit on the amount of time a remote command is allowed to execute. Default is no limit.\n-f number  Set the maximum number of simultaneous remote commands to number. The default is 32.\n-N  Disable hostname: prefix on lines of output.\n"
      }
    ],
    "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"
        ]
      },
      {
        "id": "exclude",
        "label": "Exclude hosts",
        "type": "string",
        "option": [
          "-x"
        ],
        "sources": [
          "man"
        ]
      },
      {
        "id": "user",
        "label": "Remote user",
        "type": "string",
        "option": [
          "-l"
        ],
        "sources": [
          "man"
        ]
      },
      {
        "id": "connect_timeout",
        "label": "Connect timeout (seconds)",
        "type": "integer",
        "option": [
          "-t"
        ],
        "min": 1,
        "sources": [
          "man"
        ]
      },
      {
        "id": "command_timeout",
        "label": "Command time limit (seconds)",
        "type": "integer",
        "option": [
          "-u"
        ],
        "min": 1,
        "sources": [
          "man"
        ]
      },
      {
        "id": "fanout",
        "label": "Max simultaneous commands",
        "type": "integer",
        "option": [
          "-f"
        ],
        "min": 1,
        "sources": [
          "man"
        ]
      },
      {
        "id": "no_prefix",
        "label": "Hide hostname prefix",
        "type": "boolean",
        "option": [
          "-N"
        ],
        "sources": [
          "man"
        ]
      },
      {
        "id": "fail_fast",
        "label": "Fail fast",
        "type": "boolean",
        "option": [
          "-k"
        ],
        "sources": [
          "man"
        ]
      },
      {
        "id": "max_status",
        "label": "Return largest exit status",
        "type": "boolean",
        "option": [
          "-S"
        ],
        "sources": [
          "man"
        ]
      },
      {
        "id": "batch",
        "label": "Batch mode (single Ctrl-C kills job)",
        "type": "boolean",
        "option": [
          "-b"
        ],
        "sources": [
          "man"
        ]
      },
      {
        "id": "list_only",
        "label": "List targets only, do not run",
        "type": "boolean",
        "option": [
          "-q"
        ],
        "sources": [
          "man"
        ]
      },
      {
        "id": "command",
        "label": "Command",
        "description": "Command to run on every selected host.",
        "type": "string",
        "position": 0,
        "min": 1,
        "sources": [
          "man"
        ]
      }
    ],
    "task": [
      {
        "id": "run",
        "label": "Run on hosts",
        "fields": [
          "targets",
          "exclude",
          "user",
          "no_prefix",
          "command"
        ],
        "required": [
          "targets",
          "command"
        ]
      },
      {
        "id": "preview",
        "label": "Preview targets",
        "fields": [
          "targets",
          "exclude",
          "list_only",
          "command"
        ],
        "required": [
          "targets",
          "command"
        ],
        "set": {
          "list_only": [
            true
          ]
        }
      }
    ],
    "group": [
      {
        "id": "basic",
        "label": "Basic",
        "fields": [
          "targets",
          "exclude",
          "user",
          "command",
          "no_prefix",
          "list_only"
        ]
      },
      {
        "id": "advanced",
        "label": "Advanced",
        "fields": [
          "connect_timeout",
          "command_timeout",
          "fanout",
          "fail_fast",
          "max_status",
          "batch"
        ]
      }
    ]
  }
}
