{"id":24755237,"url":"https://github.com/katzer/ski","last_synced_at":"2026-01-28T05:57:09.292Z","repository":{"id":138109185,"uuid":"71576893","full_name":"katzer/ski","owner":"katzer","description":"Sascha Knows It","archived":false,"fork":false,"pushed_at":"2024-08-27T19:55:41.000Z","size":12198,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-08-27T21:45:54.666Z","etag":null,"topics":["cli","mruby-cli","orbit","remote-execution"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/katzer.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-10-21T15:18:37.000Z","updated_at":"2024-08-27T20:08:25.000Z","dependencies_parsed_at":null,"dependency_job_id":"46e47b20-0277-4518-8cbc-1a9da69e8878","html_url":"https://github.com/katzer/ski","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/katzer%2Fski","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/katzer%2Fski/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/katzer%2Fski/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/katzer%2Fski/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/katzer","download_url":"https://codeload.github.com/katzer/ski/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":236018634,"owners_count":19082129,"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":["cli","mruby-cli","orbit","remote-execution"],"created_at":"2025-01-28T12:37:50.403Z","updated_at":"2025-10-11T01:31:30.148Z","avatar_url":"https://github.com/katzer.png","language":"Ruby","readme":"# ski - Sascha Knows It \u003cbr\u003e[![GitHub release](https://img.shields.io/github/release/katzer/ski.svg)](https://github.com/katzer/ski/releases) [![Build Status](https://travis-ci.com/katzer/ski.svg?branch=master)](https://travis-ci.com/katzer/ski) [![Build status](https://ci.appveyor.com/api/projects/status/f5imsl77fmg2omba/branch/master?svg=true)](https://ci.appveyor.com/project/katzer/goo/branch/master) [![Maintainability](https://api.codeclimate.com/v1/badges/e5995227dd52c2f7221e/maintainability)](https://codeclimate.com/github/katzer/ski/maintainability)\n\nExecute commands or collect informations on multiple servers in parallel.\n\n    $ ski -h\n\n    Usage: ski [options...] matchers...\n    Options:\n    -c, --command   Execute command and return result\n    -s, --script    Execute script and return result\n    -t, --template  Template to be used to transform the output\n    -j, --job       Execute job specified in file\n    -n, --no-color  Print errors without colors\n    -p, --pretty    Pretty print output as a table\n    -w, --width     Width of output column in characters\n    -h, --help      This help text\n    -v, --version   Show version number\n\n## Prerequisites\n\nYou'll need to add `ORBIT_HOME` first to your profile:\n\n    $ export ORBIT_HOME=/path/to/orbit\n\nThen setup the SSH agent for passwordless authentication:\n\n    $ ssh-add /path/to/key\n\n## Installation\n\nDownload the latest version from the [release page][releases] and add the executable to your `PATH`.\n\n## Usage\n\nExecute shell commands:\n\n    $ ski -c 'echo Greetings from $PACKAGE_NAME' mars pluto\n\n    Greetings from Mars\n    Greetings from Pluto\n\nExecute shell scripts:\n\n    $ ski -s greet.sh mars pluto\n\nExecute SQL commands:\n\n    $ ski -c 'SELECT * FROM DUAL' db\n\n    D\n    -\n    X\n\nExecute SQL scripts:\n\n    $ ski -s dummy.sql db\n\nPretty table output:\n\n    $ ski -p -c env localhost\n\n    +-----+-----------+--------+----------------+------+--------------------------------------------------------+\n    |                                          ski -p -c env localhost                                          |\n    +-----+-----------+--------+----------------+------+--------------------------------------------------------+\n    | NR. | ID        | TYPE   | CONNECTION     | NAME | OUTPUT                                                 |\n    +-----+-----------+--------+----------------+------+--------------------------------------------------------+\n    |  1. | localhost | server | root@localhost | Host | SSH_CONNECTION=127.0.0.1 49154 127.0.0.1 22            |\n    |     |           |        |                |      | USER=root                                              |\n    |     |           |        |                |      | PWD=/root                                              |\n    |     |           |        |                |      | HOME=/root                                             |\n    |     |           |        |                |      | SSH_CLIENT=127.0.0.1 49154 22                          |\n    |     |           |        |                |      | MAIL=/var/mail/root                                    |\n    |     |           |        |                |      | SHELL=/bin/bash                                        |\n    |     |           |        |                |      | SHLVL=1                                                |\n    |     |           |        |                |      | LOGNAME=root                                           |\n    |     |           |        |                |      | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin |\n    |     |           |        |                |      | _=/usr/bin/env                                         |\n    +-----+-----------+--------+----------------+------+--------------------------------------------------------+\n\n### Templates\n\nExecute a shell or SQL command or script and convert the output based on a [TextFSM][textfsm] template.\n\n    $ ski -s vparams.sql -t vparams db\n\nThe SQL script could look like this:\n\n```sql\nSET PAGESIZE 0\nSET NEWPAGE 0\nSET SPACE 0\nSET LINESIZE 18000\nSET WRAP OFF\nSET FEEDBACK OFF\nSET ECHO OFF\nSET VERIFY OFF\nSET HEADING OFF\nSET TAB OFF\nSET COLSEP ' , '\n\nSELECT NUM, NAME, VALUE FROM V$PARAMETER WHERE NUM IN (526, 530);\n```\n\nThe template file could look like this:\n\n    $ cat $ORBIT_HOME/templates/vparams.textfsm\n\n    Value Num (\\d+)\n    Value Name (\\S*)\n    Value Value (\\S*)\n\n    Start\n      ^ *${Num}[ |,]*${Name}[ |,]*${Value} -\u003e Record\n\n### Jobs\n\nBundle command-line arguments to a job to save the report output.\n\n    $ ski -j vparams\n\nThe job file could look like this:\n\n    $ cat $ORBIT_HOME/jobs/vparams.skijob\n\n    -s vparam.sql -t vparam db\n\nThe report result could look like this:\n\n    $ cat $ORBIT_HOME/reports/vparams/1531410936.skirep\n\n    1531410936\n    [[\"Num\", \"int\"], [\"Name\", \"string\"], [\"Value\", \"string\"]]\n    [\"db\",\"Operativ DB\",true,[\"526\", \"optimizer_adaptive_plans\", \"FALSE\"]]\n    [\"db\",\"Operativ DB\",true,[\"530\", \"optimizer_adaptive_statistics\", \"FALSE\"]]\n\n## Development\n\nClone the repo:\n\n    $ git clone https://github.com/katzer/ski.git \u0026\u0026 cd ski/\n\nInstall the dependencies:\n\n    $ bundle\n\nAnd then execute:\n\n    $ rake compile\n\nTo compile the sources locally for the host machine only:\n\n    $ MRUBY_CLI_LOCAL=1 rake compile\n\nYou'll be able to find the binaries in the following directories:\n\n- Linux (AMD64, Musl): `build/x86_64-alpine-linux-musl/bin/ski`\n- Linux (AMD64, GNU): `build/x86_64-pc-linux-gnu/bin/ski`\n- Linux (AMD64, for old distros): `build/x86_64-pc-linux-gnu-glibc-2.9/bin/ski`\n- OS X (AMD64): `build/x86_64-apple-darwin19/bin/ski`\n- OS X (ARM64): `build/arm64-apple-darwin19/bin/ski`\n- Windows (AMD64): `build/x86_64-w64-mingw32/bin/ski`\n- Host: `build/host/bin/ski`\n\nFor the complete list of build tasks:\n\n    $ rake -T\n\n## Contributing\n\nBug reports and pull requests are welcome on GitHub at https://github.com/katzer/ski.\n\n1. Fork it\n2. Create your feature branch (`git checkout -b my-new-feature`)\n3. Commit your changes (`git commit -am 'Add some feature'`)\n4. Push to the branch (`git push origin my-new-feature`)\n5. Create new Pull Request\n\n## License\n\nThe code is available as open source under the terms of the [Apache 2.0 License][license].\n\nMade with :heart: in Leipzig\n\n© 2018 [appPlant GmbH][appplant]\n\n[releases]: https://github.com/katzer/ski/releases\n[textfsm]: https://github.com/google/textfsm/wiki/TextFSM\n[license]: http://opensource.org/licenses/Apache-2.0\n[appplant]: www.appplant.de\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkatzer%2Fski","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkatzer%2Fski","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkatzer%2Fski/lists"}