Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kristopolous/TickTick
JSON in your Bash scripts
https://github.com/kristopolous/TickTick
Last synced: 6 days ago
JSON representation
JSON in your Bash scripts
- Host: GitHub
- URL: https://github.com/kristopolous/TickTick
- Owner: kristopolous
- License: other
- Created: 2011-12-03T05:08:55.000Z (almost 13 years ago)
- Default Branch: master
- Last Pushed: 2020-05-29T22:17:42.000Z (over 4 years ago)
- Last Synced: 2024-11-06T06:03:14.019Z (6 days ago)
- Language: Shell
- Homepage: http://9ol.es/TheEmperorsNewClothes.html
- Size: 103 KB
- Stars: 579
- Watchers: 17
- Forks: 55
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- License: LICENSE.APACHE2
Awesome Lists containing this project
README
# Introduction
TickTick enables you to put JSON in bash scripts. Yes, just encapsulate them with two back-ticks.
**Note: This is just a fun hack.** You may want to consider using mature languages like Ruby or Perl to solve actual real life problems. Oh who am I kidding, I use whitespace and brainfuck every day.
# Usage
Proper usage (if there is such a thing), is to place the following line right after the "shbang" at the top of your script. For instance:
#!/bin/bash
#
# Nuclear_meltdown_preventer.sh
#
# This is really important stuff. Don't edit it!
#
. ticktick.sh..
See how that's near the tippity-top? That's where it's supposed to go. If you put it lower, all bets are off. :-(
# API
Arrays
---A few array manipulation runtime directives are supported:
* `[]` (as new Array)\`\`arr = ["foo"]\`\`
* `[]` (to index)echo \`\`arr[0]\`\`
* `length`arr_len=\`\`arr.length()\`\`; echo ${arr_len}
* `push`\`\`arr.push(${arr_len})\`\`
* `pop`echo \`\`arr.pop()\`\`
* `shift`echo \`\`arr.shift()\`\`
* `delete`echo \`\`key.value.delete()\`\`
* `items`for x in \`\`arr.items()\`\`; do echo "${x}"; doneNotes:
* These feature do not preclude having variables by those names. You can have ``key.delete = 1`` and then ``key.delete.delete()``
* Since TickTick is a Bash-emitting transpiler, things that don't work in bash (such as modifying [in-shell variables](https://github.com/kristopolous/TickTick/issues/5) in double quotes) don't work in TickTick.Objects
---* `{}` (as new Object)
\`\`obj = { "foo": "bar", "baz": "qux" }\`\`
* `[]` (to index)echo \`\`obj["foo"]\`\`
* `.` (to index)echo \`\`obj.baz\`\`Miscellaneous
---#### tickParse - parse things inline
* Inline parsing: You can parse a file in with the `tickParse` routine (see the example).#### tickVars - see the currently defined variables
* Show all variables: You can see the current values defined in the TickTick world with the `tickVars` routine.
* If you don't like the output, there are some options to customize it. Try `tickVars -h` for more information.#### tickReset - clear the currently defined variables
* Clear all variables: You can erace any JSON you have created/imported with the `tickReset` routine.#### __tick_var_debug - See the interim bash code
* Dry run (display compiled code): TickTick is a mini-compiler that emits bash. If you declare `export __tick_var_debug=1` at the top of your code (before you source ticktick.sh), then the code will not run but instead print what it would have run.Bash variables ($) in JSON
---Along with assignment operations1, and Javascript like indexing into objects and arrays.
Additionally, bash variables (eg., "$name") are preserved in the TickTick blocks. For instance, once could do
`` Var.Data = [] ``
`` Var.Data.push($key) ``
bashvar=`` Var.Data.pop() ``1Although Javascript supports $ prefixed variables, this does not.
# ExamplesInline Parsing
---#!/bin/bash
. ticktick.sh
bob=Bob
``
people = {
"HR" : [
"Alice",
$bob,
"Carol"
],
"Sales": {
"Gale": { "profits" : 1000 },
"Harry": { "profits" : 500 }
}
}
``function printEmployees() {
echo
echo " The ``people.Engineering.length()`` Employees listed are:"for employee in ``people.Engineering.items()``; do
printf " - %s\n" "${!employee}"
doneecho
}echo Base Assignment
`` people.Engineering = [ "Darren", "Edith", "Frank" ] ``
printEmployeesnewPerson=Isaac
echo Pushed a new element by variable, $newPerson onto the array
`` people.Engineering.push($newPerson) ``
printEmployeesecho Shifted the first element off: `` people.Engineering.shift() ``
printEmployeesecho Popped the last value off: `` people.Engineering.pop() ``
printEmployeesecho Indexing an array, doing variable assignments
person0=``people.HR[0]``
echo $person0 ``people.HR[1]``Using a File or cURL
---#!/bin/bash
. ../ticktick.sh# File
DATA=`cat data.json`
# cURL
#DATA=`curl http://foobar3000.com/echo/request.json`tickParse "$DATA"
echo ``pathname``
echo ``headers["user-agent"]``## Mailing List
Join it [over here](http://groups.google.com/group/ticktick-project).
## LICENSE
This software is available under the following licenses:
* MIT
* Apache 2Parts of this work are derived from [JSON.sh](https://github.com/dominictarr/JSON.sh), which is also available under the aforementioned licenses.