{"id":16052253,"url":"https://github.com/yvan-sraka/yeast","last_synced_at":"2026-04-02T02:07:06.089Z","repository":{"id":45291270,"uuid":"123137629","full_name":"yvan-sraka/YeAST","owner":"yvan-sraka","description":"Yet Another Shell Trick","archived":false,"fork":false,"pushed_at":"2021-12-23T22:18:54.000Z","size":145,"stargazers_count":11,"open_issues_count":10,"forks_count":0,"subscribers_count":4,"default_branch":"main","last_synced_at":"2024-10-16T01:28:18.014Z","etag":null,"topics":["pipe","posix","programming-language","rust","shell","unix"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yvan-sraka.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-02-27T14:05:18.000Z","updated_at":"2024-09-24T21:45:38.000Z","dependencies_parsed_at":"2022-08-19T03:20:34.312Z","dependency_job_id":null,"html_url":"https://github.com/yvan-sraka/YeAST","commit_stats":null,"previous_names":[],"tags_count":21,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yvan-sraka%2FYeAST","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yvan-sraka%2FYeAST/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yvan-sraka%2FYeAST/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yvan-sraka%2FYeAST/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yvan-sraka","download_url":"https://codeload.github.com/yvan-sraka/YeAST/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221696962,"owners_count":16865516,"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":["pipe","posix","programming-language","rust","shell","unix"],"created_at":"2024-10-09T01:08:25.797Z","updated_at":"2026-04-02T02:07:06.038Z","avatar_url":"https://github.com/yvan-sraka.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- cargo-sync-readme start --\u003e\n\nYeAST [![Build Status](https://travis-ci.org/yvan-sraka/YeAST.svg?branch=master)](https://travis-ci.org/yvan-sraka/YeAST)\n=========================================================================================================================\n\n*Yet Another Shell Trick*\n\nWhat's that?\n------------\n\nYeAST is an extension of the bourne shell [shebangsyntax](https://en.wikipedia.org/wiki/Shebang_\\(Unix\\)).\n\nYeAST aims to solve issues of interoperability, parallel programming,\nquick prototyping and progressive refactoring by invite users to use\nin their scripts and software features of UNIX systems and build things\nmore [KISS](https://en.wikipedia.org/wiki/KISS_principle).\n\nYou can read more about it through:\n\n-   [a blog post](https://yvan-sraka.github.io/1970/01/05/yeast.html) on\n    my web page\n-   [a lightning talkpresentation](https://raw.githubusercontent.com/yvan-sraka/yvan-sraka.github.io/master/YeAST.pdf)\n    of the core idea, implementation, and real-world applications\n\nQuick Running\n-------------\n\nThese instructions will get you the last stable binaries of yeast on\nyour local machine for standard usage purposes.\n\n### Binaries installation\n\n#### ..on macOS using `brew`:\n\nYou can install YeAST on macOS using our [Homebrew](https://brew.sh/)\ncustom Tap:\n\n``` {.shell}\nbrew install yvan-sraka/YeAST/yeast\n```\n\n#### ..on others UNIX-like using the install script:\n\nRun the following line in your terminal, then follow the onscreen\ninstructions:\n\n``` {.shell}\ncurl https://raw.githubusercontent.com/yvan-sraka/YeAST/master/install.sh -sSf | sh\n```\n\n\u003e If you wonder what this previous command do, don't hesitate to inspect\n\u003e the script: it runs all instructions of the **Getting Started**\n\u003e section.\n\n### Bootstraping\n\nTo make scripts easily work out of the box, you can add this little hack\nat the beggining of your files:\n\n``` {.shell}\n#! /bin/sh\n#! @ignore\nif ! [ -x \"$(command -v yeast)\" ]; then\n  curl \"https://raw.githubusercontent.com/yvan-sraka/YeAST/master/install.sh\" -sSf | sh\nfi\nyeast \"$0\"\nexit\n```\n\n### Editors integration\n\nYou now have YeAST installed on your machine! Cool next thing to do\ncould be to get a syntax support extension for your favorite code\neditor:\n\n-   [VisualStudioCode](https://marketplace.visualstudio.com/items?itemName=yvan-sraka.yeast)\n\nGetting Started\n---------------\n\nThese instructions will get you a copy of the project up and running on\nyour local machine for development and testing purposes.\n\n### Prerequisites\n\nGet a stable [Rust](https://www.rust-lang.org/) toolchain:\n\n``` {.shell}\ncurl https://sh.rustup.rs -sSf | sh\n```\n\n### Building and running\n\n``` {.shell}\ngit clone git@github.com:yvan-sraka/YeAST.git\ncd YeAST\ncargo run basic_example.yst\n```\n\nEcosystem\n---------\n\n-   [Kombucha](https://github.com/yvan-sraka/Kombucha): a simple aliases\n    manager for YeAST\n-   [Palombe](https://github.com/yvan-sraka/Palombe): which lets you\n    send and receive messages synchronously through different processes\n-   [Cleopatra](https://github.com/yvan-sraka/Cleopatra): make YeAST be\n    called in place of your standard interpreter in the current\n    environment\n\nReal-World Examples\n-------------------\n\nThe\n[basic_example](https://github.com/yvan-sraka/YeAST/blob/master/basic_example.yst)\navailable in this repository is fun to get a general idea behind\nYeAST! But to understand the purpose of this tool, we will go\nthrough examples inspired from *REAL WORLD*, mainly by my scientific\ndomain: \"Bioinformatics and Modeling\".\n\n### YeAST works like `cat` outside interpreters\n\n``` {.yeast}\n#! /usr/bin/env yeast\n\nThis text will be printed on standard output!\n\nBesides we experiment with a Python code we expect to say \"Hello World\":\n\n#! python3\nprint(\"Hello, World!\")\n#!\n\nEnjoy this nice way of writing code in notebook style.\n```\n\n### It provides multithreading by default\n\n``` {.yeast}\n#! /usr/bin/env yeast\n\nHere we try to fold 3 different sequences, so we do it in parallel by\nallocating 3 threads, there is no additional syntax needed:\n\n#! python3 folding.py\n;LCBO - Prolactin precursor - Bovine\n; a sample sequence in FASTA format\nMDSKGSSQKGSRLLLLLVVSNLLLCQGVVSTPVCPNGPGNCQVSLRDLFDRAVMVSHYIHDLSS\nEMFNEFDKRYAQGKGFITMALNSCHTSSLPTPEDKEQAQQTHHEVLMSLILGLLRSWNDPLYHL\nVTEVRGMKGAPDAILSRAIEIEEENKRLLEGMEMIFGQVIPGAKETEPYPVWSGLPSLQTKDED\nARYSAFYNLLHCLRRDSSKIDTYLKLLNCRIIYNNNC*\n!#\n\nShebang in YeAST could be any shell command that's accepting as last argument a\ngiven file, here we use the syntax to call our external script `folding.py`.\n\n#! python3 folding.py\n\u003eMCHU - Calmodulin - Human, rabbit, bovine, rat, and chicken\nADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTID\nFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREA\nDIDGDGQVNYEEFVQMMTAK*\n!#\n\nBonus: the output of this multithreading computation will be displayed the right\norder as soon that the information is available!\n\n#! python3 folding.py\n\u003egi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus]\nLCLYTHIGRNIYYGSYLYSETWNTGIMLLLITMATAFMGYVLPWGQMSFWGATVITNLFSAIPYIGTNLV\nEWIWGGFSVDKATLNRFFAFHFILPFTMVALAGVHLTFLHETGSNNPLGLTSDSDKIPFHPYYTIKDFLG\nLLILILLLLLLALLSPDMLGDPDNHMPADPLNTPLHIKPEWYFLFAYAILRSVPNKLGGVLALFLSIVIL\nGLMPFLHTSKHRSMMLRPLSQALFWTLTMDLLTLTWIGSQPVEYPYTIIGQMASILYFSIILAFLPIAGX\nIENY\n!#\n```\n\nRoadmap\n-------\n\n-   [x] Create a Makefile to handle `make`, `make test` \u0026 `make install`\n    intructions.\n-   [x] Validate builds using Travis CI.\n-   [x] Read input file line by line using a Buffer.\n-   [x] Use [clap.rs](https://github.com/kbknapp/clap-rs) to enhance\n    command line interactions.\n-   [x] Allow sub-scripts to read command-line arguments, using `$0`,\n    `$1`, etc ...\n-   [x] ... and `$*` for all input args.\n-   [x] Handle scripts errors correctly and display a `BACKTRACE` in\n    `=1|full` mode\n-   [x] Let the use of `#! /usr/bin/env yeast` not failed in stack\n    overflow due to an infinite loop of self-calls.\n-   [x] Fix rules for inlining shell commands in scripts.\n-   [x] Let the user write multiline commands as he did in an interactive\n    shell.\n-   [x] Add bunch of input / output tests scripts.\n-   [x] Provide true multithreading by getting ride of the waiting lock of\n    shell command output!\n-   [ ] Write a beautiful and comprehensive `man` page.\n-   [x] Create an install script for handling one-instruction\n    installation.\n-   [ ] Create packages for most UNIX distributions.\n-   [ ] Host a beautiful landing page on the `gh-page` branch of this\n    repository.\n-   [ ] Add Windows support (use `cmd` instead of `sh` and [Windowsnamedpipes](https://msdn.microsoft.com/en-us/library/windows/desktop/aa365590\\(v=vs.85\\).aspx)\n    instead of `mkfifo`).\n-   [x] Create a small lib in each language to uniform the use of named\n    pipes in sharing serialized data between processes.\n-   [x] Provide a collection of alias by adding a special environment to\n    the `PATH` of command launch by YeAST.\n-   [x] Add a simple script in the path to update aliases by running a\n    `git pull`.\n-   [x] Provide plugins for syntactic coloration in VSCode.\n-   [x] Let user define a top level interpreter by set `YEAST_CONTEXT`\n    env variable\n\nContributing\n------------\n\nPlease read\n[CONTRIBUTING.md](https://github.com/yvan-sraka/YeAST/blob/master/CONTRIBUTING.md)\nfor details on our code of conduct, and the process for submitting a pull\nrequests to us.\n\nAuthors\n-------\n\n-   [Yvan Sraka](https://github.com/yvan-sraka) - for the original idea\n-   [Mattia Primavera](https://github.com/MattiaPrimavera/) - who\n    provide constant positive feedback and was the very first\n    beta-tester\n\nSee also the list of\n[contributors](https://github.com/yvan-sraka/YeAST/graphs/contributors)\nwho participated in this project.\n\nLicense\n-------\n\nThis project is licensed under the 3rd version of the GPL License - see the\n[LICENSE](https://github.com/yvan-sraka/YeAST/blob/master/LICENSE) file\nfor details.\n\n\u003c!-- cargo-sync-readme end --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyvan-sraka%2Fyeast","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyvan-sraka%2Fyeast","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyvan-sraka%2Fyeast/lists"}