{"id":15065965,"url":"https://github.com/superioz/parx","last_synced_at":"2025-04-10T13:35:03.555Z","repository":{"id":57704139,"uuid":"432444843","full_name":"Superioz/parx","owner":"Superioz","description":"Execute multiple shell commands like Docker-Compose","archived":false,"fork":false,"pushed_at":"2021-12-07T18:49:10.000Z","size":11,"stargazers_count":8,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-24T12:21:28.295Z","etag":null,"topics":["bash","docker-compose","parallel","shell"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Superioz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-11-27T11:41:00.000Z","updated_at":"2022-08-15T22:42:54.000Z","dependencies_parsed_at":"2022-09-26T21:12:06.034Z","dependency_job_id":null,"html_url":"https://github.com/Superioz/parx","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Superioz%2Fparx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Superioz%2Fparx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Superioz%2Fparx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Superioz%2Fparx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Superioz","download_url":"https://codeload.github.com/Superioz/parx/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248225878,"owners_count":21068079,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bash","docker-compose","parallel","shell"],"created_at":"2024-09-25T00:58:25.236Z","updated_at":"2025-04-10T13:35:03.529Z","avatar_url":"https://github.com/Superioz.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# parx\r\n\r\n`parx` is a simple tool to run multiple commands in parallel while having the output structured like [Docker Compose](https://docs.docker.com/compose/) does that. This is useful when developing on a distributed system without using Docker and Docker-Compose. Inspired by [k-bx/par](https://github.com/k-bx/par).\r\n\r\nTo install this tool simply download the binary from the current release and put it somewhere in your `$PATH`. With `parx -h` you should now be able to see the help page.\r\n\r\nThe exit code of the command only refers to its own logic, not to the exit code of the processes. If any process fails, but the command generally succeeded, the exit code will still be 0.\r\n\r\n## Quick Usage\r\n\r\nThe simplest usage is to append each command with `\"\"` escaped to the arguments. Now two processes get started up and exit if they are done.\r\n\r\n```sh\r\n\u003e parx \"echo Hello World; sleep 5; echo Bye\" \"sleep 10; echo Ciao!\"\r\nprocess_0 | Hello World\r\nprocess_0 | Bye\r\nprocess_0 exited\r\nprocess_1 | Ciao!\r\nprocess_1 exited\r\n```\r\n\r\nThe prefix for each process is colored, just like Docker Compose does it. This is only enabled, if a valid tty is attached. See [this package](https://github.com/fatih/color) for more. Also, it is generated, as there is no nice way to set the name via command line.\r\n\r\n## Extended usage\r\n\r\nFor extended usage, it is recommended to use a `parx.yml` file to describe the processes and their commands.\r\n\r\nExample from above as config:\r\n\r\n```yaml\r\nprocesses:\r\n  - name: hello\r\n    command: echo Hello $NAME; sleep 5; echo Bye\r\n    env:\r\n      NAME: Thomas\r\n  - name: ciao\r\n    command: sleep 10; echo Ciao!\r\n```\r\n\r\nYou can now store the file whereever you like and reference it via `parx -f path/to/your-file.yml`. The prefixes are now set to the name of the process. For a full configuration, have a look at the `parx.example.yml` in this repo.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuperioz%2Fparx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsuperioz%2Fparx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuperioz%2Fparx/lists"}