{"id":17115291,"url":"https://github.com/nickdiego/proj-commander","last_synced_at":"2026-01-20T14:07:13.043Z","repository":{"id":68744238,"uuid":"92625855","full_name":"nickdiego/proj-commander","owner":"nickdiego","description":"Bash script helpers for making easier to deal with multiple projects from command line.","archived":false,"fork":false,"pushed_at":"2017-12-07T21:29:35.000Z","size":9,"stargazers_count":2,"open_issues_count":3,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-06T02:31:28.201Z","etag":null,"topics":["bash","linux","projects","shell"],"latest_commit_sha":null,"homepage":"","language":"Shell","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/nickdiego.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-05-27T21:48:55.000Z","updated_at":"2024-06-17T06:40:37.000Z","dependencies_parsed_at":"2023-02-26T11:16:18.809Z","dependency_job_id":null,"html_url":"https://github.com/nickdiego/proj-commander","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nickdiego/proj-commander","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickdiego%2Fproj-commander","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickdiego%2Fproj-commander/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickdiego%2Fproj-commander/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickdiego%2Fproj-commander/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nickdiego","download_url":"https://codeload.github.com/nickdiego/proj-commander/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickdiego%2Fproj-commander/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28604712,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T12:01:53.233Z","status":"ssl_error","status_checked_at":"2026-01-20T12:01:46.545Z","response_time":117,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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","linux","projects","shell"],"created_at":"2024-10-14T17:26:44.956Z","updated_at":"2026-01-20T14:07:13.028Z","avatar_url":"https://github.com/nickdiego.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# proj-commander\nBash script helpers for making easier to deal with multiple projects from command line.\n\nFollowing the Unix-as-an-IDE philosophy, `proj-commander` aims to help Unix/Linux users (programmers, sysadmins, packagers, etc)\nthat deal with multiple software projects in a daily basis. The basic idea is to have simple \"configuration\" files (actually pure\nshell scripts ) for each project, where the user may set some variables (e.g the root directory of the project, its subprojects,\netc) and must implement some functions that `proj-commander` executes when initializing and switching to/from that project (`setenv`\nand `activate`). With this simple mechanism plus some helper functions implemented by `proj-commander` (`pset` and `pcd` for now)\nand full bash-completion support, `proj-commander` can make extremely more practical and efficient to switch between projects / \nsubprojects and even their sub-directories.\nAs the configuration files are actually shell scripts, the user has the freedom to adapt the environment to the specific needs\nof each project (e.g: sourcing some project's env script, start some background program/daemon, configure specific version of a\ntool, python for example, etc), everything in a organized way, keeping each project-specific config in a separate file and activating/loading\nthem only when necessary.\n\n*In some aspects, `proj-commander` is inspired by Arch Linux's packaging/building system, where the package are built following\nthe steps described in PKGBUILD files, the are simple and clean bash scripts the set some vars and implement some functions defined\nby the packaging system.*\n\n## Installation\n\nRunning on a Linux/Unix machine\\*, run on some bash\\*\\* instance:\n*\\* tested only in recent versions of Arch Linux\u003cbr/\u003e\n\\*\\* tested only in 4.0+ versions of Bash, so far*\n```bash\n$ curl https://raw.githubusercontent.com/nickdiego/proj-commander/master/proj-commander.sh \u003e ~/.proj-commander \u0026\u0026\n$ echo '[ -r ~/.proj-commander ] \u0026\u0026 source ~/.proj-commander' \u003e\u003e ~/.bashrc \u0026\u0026\n$ exec /bin/bash -l\n```\n\n## Configuration\n\nAfter installing, you need to create the configuration files for your projects in `~/.projects.d` directory. For example, you may\nhave a conf file the Qt5 project as follows:\n\n```bash\nprojname=qt5\nprojpath=~/myprojects/qt5\nsubprojects=(base webengine)\nsetenv() {\n  targets=('Msys-x86_64' 'Linux-x86_64')\n  dirs[src]=\"qt${subproj}/src\"\n}\n\nactivate() {\n  dirs[build]=\"build/$target\"\n  [ -r ${dirs[root]}/env.sh ] \u0026\u0026 . ${dirs[root]}/env.sh\n}\n\n```\n*Some other configuration file example can be found in https://github.com/nickdiego/dotfiles/tree/master/.projects-env.d*\n\n## Usage\nAfter reloading bash, you can finally use the `proj-commander` commands `pset` and `pcd` to activate and navigate to\nqt project, for example:\n```bash\n$ pset @qt5      \u003c-- set qt5 as the current project and `activate` it (that will source its `env.sh` script\n\n$ pcd            \u003c-- change current directory to qt5's root dir\n\n$ pcd @qt5/base  \u003c-- change current directory to qt5's qtbase/src dir\n\n$ pcd @qt5/base corelib/io   \u003c-- change current directory to qt5's qtbase/src/corelib/io dir\n```\n\nBoth `pset` and `pcd` support nicely bash completion, which make even faster the switch among the projects.\n\n\n## Status\nEven though the project is in an early stage of development, I've been using it at work for some months and it seems pretty\nstable in recent versions of bash, but tests in different envs (e.g: distributions other than Arch, older versions of bash,\nnon-linux envs, etc) and feedbacks are very valuable to improve the project, so give it a try, open issues or even better\nsend pull requests :)\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnickdiego%2Fproj-commander","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnickdiego%2Fproj-commander","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnickdiego%2Fproj-commander/lists"}