Zx 3.0
tgsovlerkhgsel 2021-08-16 13:00:50 +0000 UTC [ - ]
Even Go, that prides itself on the good support for parallelism, fails once you actually want go get results back.
If this were paired with some way to also display the status/output of multiple commands in parallel, this would be the ultimate toolkit to write scripts.
If you look at apt, for example: Does it really have to wait for the last package to be downloaded before installing the first? Is there a good reason, on modern SSD-based computers, to not parallelize the installation of multiple packages that don't depend on each other?
q3k 2021-08-16 14:16:27 +0000 UTC [ - ]
It's doable if you're willing to build a very thin abstraction over whatever you're trying to parallelize keeping in mind all possible edgecases [1] and how you'd like to handle them.
A generic `run N things in parallel and collect their results` function would be nice, but would probably end up being quite unwieldy in comparison to just writing out a purpose-specific function for what you exactly need.
[1] - Error handling, timeouts/cancellation, maximum amount of processes running in parallel, wait-for-full-join vs. returning results as they appear, introspection of currently running subordinates, subordinate output streaming/buffering/logging, ... A lot of things to consider when you're trying to build something universal, but that are easy to solve/ignore when you're building something purpose-specific with known constraints.
tgsovlerkhgsel 2021-08-16 14:57:25 +0000 UTC [ - ]
Imagine if instead of that, you could do:
foo, bar, []err := await getFoo(), getBar()
if len(err) > 0 {
return nil, nil, fmt.Errorf("Frobnication failed: %s", err)
}
return foo, bar, nil
Of course, JavaScript having exceptions as the main error-raising approach and `await` supporting them makes that a lot easier.
otabdeveloper4 2021-08-16 14:23:24 +0000 UTC [ - ]
tgsovlerkhgsel 2021-08-16 14:48:33 +0000 UTC [ - ]
reddit_clone 2021-08-16 22:05:45 +0000 UTC [ - ]
IMO, it is pretty much the best-of-all-worlds language that is still accessible. (Meaning not exotic like Haskell or Erlang..)
The concurrency is beautifully painless.
rurban 2021-08-16 14:13:28 +0000 UTC [ - ]
somecmd & someothercmd & wait
runs the two commands in parallel and waits for both. no need for await. to run in serial replace & with && and skip the wait
striking 2021-08-16 16:53:15 +0000 UTC [ - ]
(If you know how many subshells you started and won't get confused by which is which, you can use `wait -n && wait -n && ...` in bash)
MisterTea 2021-08-16 19:28:22 +0000 UTC [ - ]
tgsovlerkhgsel 2021-08-16 14:50:50 +0000 UTC [ - ]
Still doesn't let you easily get the output of the two commands, but a good start.
10000truths 2021-08-16 15:46:35 +0000 UTC [ - ]
(/my/bg_producer1 > /shm/file1) &
(/my/bg_producer2 > /shm/file2) &
/my/longrunningfgjob
wait
(/my/consumer1 < /shm/file1) &
(/my/consumer2 < /shm/file2) &
wait
otabdeveloper4 2021-08-16 14:22:13 +0000 UTC [ - ]
Oh yeah, right, because the first thing that comes to mind when writing bash scripts is "I sure wish there was more 'await' noise in all this code!"
Anyways: 'async' in the Python and Javascript sense was a mistake, future generations will think we were insane to adopt it.
https://journal.stuffwithstuff.com/2015/02/01/what-color-is-...
Vinnl 2021-08-16 15:08:06 +0000 UTC [ - ]
eyelidlessness 2021-08-16 22:07:33 +0000 UTC [ - ]
Adding it to a language where IO is typically blocking with other ergonomic concurrency mechanisms, that I can imagine being somewhat controversial.
It would be good if async weren’t infectious, but as a sibling comment said that was already the case with Promises and callbacks.
It would maybe also be better if concurrency was the default behavior and keeping a reference to a promise was the explicit syntax, but I could see downsides to that. It potentially hides/encourages excessive use of expensive calls. And implicit concurrency is a potential source of many bugs.
laurent123456 2021-08-16 15:38:10 +0000 UTC [ - ]
cfeliped 2021-08-16 10:10:32 +0000 UTC [ - ]
It was a terrible idea, as I now had 3 problems instead of 1:
1 - Writing scripts, plus:
2 - Installing Python in every host that needed to run those scripts
3 - Maintaining Python and the necessary dependencies up to date in each host / container.
(2) and (3) are trivial when done just once in your own computer, but end up being a huge time sink for larger heterogeneous environments with (possibly) network and security barriers. Moreover, if you are using containers, installing Python will make images unecessarily large.
Granted, I'm not a JS person, but I imagine one will have the same issues.
Even though bash has its shortcomings, I really appreciate how low maintenance it is as long as you keep scripts small and sane.
qalmakka 2021-08-16 10:23:29 +0000 UTC [ - ]
nyanpasu64 2021-08-16 11:01:50 +0000 UTC [ - ]
qalmakka 2021-08-16 14:32:02 +0000 UTC [ - ]
thatwasunusual 2021-08-16 13:52:24 +0000 UTC [ - ]
My first thought was related to this as well: Perl is _always_ installed, and based on Python's popularity (compared to Perl, at least), I'd assume that Python also was installed by default?
That's an honest question, btw: I use Perl quite a lot, Python not so much (at all). :)
cfeliped 2021-08-16 14:09:39 +0000 UTC [ - ]
qalmakka 2021-08-16 14:34:15 +0000 UTC [ - ]
mst 2021-08-16 17:02:27 +0000 UTC [ - ]
Plus of course if you want to use (pure perl) cpan dependencies I wrote http://p3rl.org/App::FatPacker and http://p3rl.org/Object::Remote to make that easier.
thatwasunusual 2021-08-17 02:50:24 +0000 UTC [ - ]
Why do you link to p3rl.org? And, more importantly, why do you link to something that doesn't exist?
cfeliped 2021-08-16 17:29:23 +0000 UTC [ - ]
For servers it's less common, but enterprise systems never cease to amuse me.
qalmakka 2021-08-19 09:27:17 +0000 UTC [ - ]
andrewl-hn 2021-08-16 10:26:48 +0000 UTC [ - ]
Still, zx isn't as nice as Ruby, which has backticks for calling shell as part of the language. So, you don't have to have a separate package installed, just the ruby runtine.
But Perl is even better! Just like Ruby, it comes with backtick shell execution build-in, but unlike Ruby Perl is ubiquitous and is pretty strict about backward compatibility. So, your scripts will just run on all machines you have, no matter what distro you use and how old the machine is (within reason).
ptx 2021-08-16 16:30:07 +0000 UTC [ - ]
[1] https://github.com/google/zx/blob/3.0.0/test.mjs#L30-L33
gravypod 2021-08-16 13:11:17 +0000 UTC [ - ]
sumtechguy 2021-08-16 14:46:03 +0000 UTC [ - ]
hulitu 2021-08-16 16:02:13 +0000 UTC [ - ]
cfeliped 2021-08-16 17:31:30 +0000 UTC [ - ]
Most images will either have bash or ash installed. ash, being lightweight, is the choice of alpine and related distros.
asveikau 2021-08-16 19:32:28 +0000 UTC [ - ]
Later shells came in and filled some gaps. OpenBSD still has ksh by default. Linux distros had bash as their /bin/sh.
kjgkjhfkjf 2021-08-16 09:45:07 +0000 UTC [ - ]
Dobbs 2021-08-16 09:53:08 +0000 UTC [ - ]
tym0 2021-08-16 09:53:04 +0000 UTC [ - ]
travelbuffoon 2021-08-16 11:13:50 +0000 UTC [ - ]
There are some exceptions depending on local laws and contracts though, so it’s only mostly and not always true.
codewiz 2021-08-16 10:24:23 +0000 UTC [ - ]
There could be gray areas where code ownership could be disputed, but in general your employer owns only the intellectual property it paid for.
Source: I'm a Googler (until next month).
marcyb5st 2021-08-16 11:44:46 +0000 UTC [ - ]
Source: I'm a Googler that went through the process before.
Edit #1 for all Googlers reading this: search "IARC" internally and you should land on the proper page to kickstart the process.
tgsovlerkhgsel 2021-08-16 12:46:23 +0000 UTC [ - ]
Compare e.g. https://thebusinessprofessor.com/en_US/property-law/californ...
I bet Google lacks the copyright for many of the projects they claim.
marcyb5st 2021-08-16 12:54:39 +0000 UTC [ - ]
[1] you fill a form with the general idea description, you explain succinctly why it doesn't compete to any Google product, and you acknowledge you won't use Google time and resources to develop it. Then a committee reviews it and in ~1 week you get your approval or request for more details.
q3k 2021-08-16 13:07:41 +0000 UTC [ - ]
It might work for people who chisel away at their own long-term one-person pet projects, but breaks down if you're used to quickly hacking away collaboratively in various groups. Especially if you're an active member of a hackerspace.
goohle 2021-08-16 13:11:19 +0000 UTC [ - ]
IMHO, such "forced labor for free" is a form of slavery. Slavery is forbidden by law.
If a developer want to publish his project under Google brand, then exchange may be considered as fair (project code for Google branding).
q3k 2021-08-16 12:48:48 +0000 UTC [ - ]
Good luck taking Google to court.
kyrra 2021-08-16 12:28:44 +0000 UTC [ - ]
q3k 2021-08-16 12:32:18 +0000 UTC [ - ]
kyrra 2021-08-16 12:35:50 +0000 UTC [ - ]
marcyb5st 2021-08-16 12:58:25 +0000 UTC [ - ]
codewiz 2021-08-18 06:38:37 +0000 UTC [ - ]
I went through the IARC process 2 years ago for a startup I was about to found in Tokyo, and obtaining clearance was easy, as you say. It's an extra precaution to avoid future litigation, but not legally required if you keep your personal coding activity clearly and provably separate from your work activity.
geofft 2021-08-16 13:25:13 +0000 UTC [ - ]
sneak 2021-08-16 12:03:44 +0000 UTC [ - ]
travelbuffoon 2021-08-16 12:48:51 +0000 UTC [ - ]
In some locations, employers can’t claim copyright on works unrelated to your current role.
geofft 2021-08-16 13:27:05 +0000 UTC [ - ]
(Obviously this is not legal advice, talk to your own layers, etc.)
wokwokwok 2021-08-16 10:47:24 +0000 UTC [ - ]
Not in the “haha, yes of course”, in the “I’ve spoken to HR and have it writing” kind of way.
I’ve heard this is not true from others, it is simply true in certain geographical regions where local laws override the contract you signed.
mrgriscom 2021-08-16 11:06:38 +0000 UTC [ - ]
q3k 2021-08-16 11:36:38 +0000 UTC [ - ]
That's the catch. Not related to what _you_ do at Google, but related to _anything_ that Google does. Pretty much all the stuff I wanted to work on in my spare time while employed at Google could be seen as related to Google's business/research, as Google does a lot of things. And that's how Google seems to read this too, considering how the Open Sourcing documentation [1] is written.
[1] - https://web.archive.org/web/20210710210932/https://opensourc... “As part of your employment agreement, Google most likely owns intellectual property (IP) you create while at the company. Because Google’s business interests are so wide and varied, this likely applies to any personal project you have. That includes new development on personal projects you created prior to employment at Google.”
inshadows 2021-08-16 14:25:08 +0000 UTC [ - ]
skybrian 2021-08-16 15:20:35 +0000 UTC [ - ]
Since they started out owned by Google, you need permission to open source them.
But how much company support they have and how popular they are varies.
tyingq 2021-08-16 12:55:19 +0000 UTC [ - ]
thatwasunusual 2021-08-16 13:50:09 +0000 UTC [ - ]
mst 2021-08-16 17:08:59 +0000 UTC [ - ]
maga 2021-08-16 08:37:52 +0000 UTC [ - ]
https://gist.github.com/zandaqo/93004fb265146a95aadb28ec851a...
searchableguy 2021-08-16 10:04:38 +0000 UTC [ - ]
Here is a more full fleded version.
SahAssar 2021-08-16 09:03:42 +0000 UTC [ - ]
satyanash 2021-08-16 09:32:08 +0000 UTC [ - ]
`cat package.json | grep name`
branch = `git branch --show-current`
`dep deploy --branch=#{branch}` if $?.success?
[
"sleep 1; echo 1",
"sleep 2; echo 2",
"sleep 3; echo 3",
].map { |cmd| Thread.new { %x(cmd) } }.each(&:join)
name = 'foo bar'
`mkdir /tmp/#{name}` if $?.success?
jitl 2021-08-16 12:39:39 +0000 UTC [ - ]
To be safe, abstractions that make it easy to shell out must also:
- escape all variable interpolations by default using “shellwords” or similar.
- throw exceptions on error by default.
Backticks in Ruby are very easy to use, but aren’t safe.
dvogel 2021-08-16 13:18:39 +0000 UTC [ - ]
ilyash 2021-08-16 15:33:27 +0000 UTC [ - ]
https://ilya-sher.org/2017/01/28/ngs-unique-features-exit-co...
hulitu 2021-08-16 16:07:01 +0000 UTC [ - ]
eatonphil 2021-08-16 12:41:58 +0000 UTC [ - ]
chubot 2021-08-16 12:14:23 +0000 UTC [ - ]
pornel 2021-08-16 14:55:23 +0000 UTC [ - ]
It doesn't matter where input comes from. Input needs to be escaped for the context it's used in, period. Non-exploitable doesn't mean it's correct.
azkae 2021-08-16 12:52:25 +0000 UTC [ - ]
import sh
print(sh.ifconfig("eth0"))
https://amoffat.github.io/sh/
ahaferburg 2021-08-17 10:36:36 +0000 UTC [ - ]
> Will Windows be supported?
> There are no plans to support Windows.
ducktective 2021-08-16 12:57:06 +0000 UTC [ - ]
jeswin 2021-08-16 13:06:58 +0000 UTC [ - ]
If you want the exact opposite of this (that is, to use JS from the shell), try https://bashojs.org
For example:
curl 'https://api.openweathermap.org/data/2.5/weather?q=Bangalore&appid=2a125de83c277f4ce0ace5ed482f22b9' | basho --json -j 'x.weather[0].description + ", feels like: " + Math.round(10 * (x.main.feels_like - 273.15))/10 + "°C"'
miohtama 2021-08-16 08:26:59 +0000 UTC [ - ]
- Python code with Shell is easier to read ana write
- No nees to carry async/await keywords thru the code
- Powerful plain text manipulation in the stdlib
dogma1138 2021-08-16 08:37:04 +0000 UTC [ - ]
Not sure how I feel about needing Node.JS to run shell scripts…
SahAssar 2021-08-16 09:05:21 +0000 UTC [ - ]
That is pretty subjective
miohtama 2021-08-16 10:00:28 +0000 UTC [ - ]
alexghr 2021-08-16 08:38:11 +0000 UTC [ - ]
dogma1138 2021-08-16 08:42:04 +0000 UTC [ - ]
Would be a bit more interesting to me if it was a JS shell built from the ground up without the entire mess of the Node package dependency baggage.
ptx 2021-08-16 16:39:42 +0000 UTC [ - ]
alexghr 2021-08-16 08:48:16 +0000 UTC [ - ]
If you're working on a Node-based service or React app, you already have to deal with Node and its package ecosystem. Adding a couple of extra MB (or even KB, depending on package reuse) on top of your existing chain of dependencies is a tiny con to the huge benefit of not having to do logic in Bash :)
dogma1138 2021-08-16 10:15:29 +0000 UTC [ - ]
arve0 2021-08-16 21:14:26 +0000 UTC [ - ]
If you are fluent in Node, it should be easy to avoid further dependencies.
mikevm 2021-08-16 09:21:12 +0000 UTC [ - ]
wdroz 2021-08-16 12:23:38 +0000 UTC [ - ]
IshKebab 2021-08-16 09:12:24 +0000 UTC [ - ]
I would recommend using Deno. It has the following advantages:
* Uses Typescript which gives you a great static typing system.
* Runs via V8 so it's about a million times faster than Python.
* Single statically linked binary with no project setup files required (package.json/dependencies.txt) makes it about a million times easier to deploy than either Node or Python. Especially on Windows.
* You can still use third party libraries even without a project file and you get IDE integration.
It's the clear winner at this point. Someone has even made a version of zx for it:
tcbasche 2021-08-16 09:21:16 +0000 UTC [ - ]
IshKebab 2021-08-16 13:24:25 +0000 UTC [ - ]
Also it obviously depends what your CLI tool is doing. Just because something is a CLI tool doesn't mean it doesn't do much stuff and therefore performance doesn't matter.
For example Scons is a CLI tool. It's a build system written in Python. Everybody abandoned it because it was dog slow.
Mercurial is a CLI tool. It's a VCS written in Python. Most people have abandoned it partly because it is slow (and partly because Github exists).
You can read about Mercurial's troubles with Python performance here:
https://www.mercurial-scm.org/wiki/OxidationPlan
> Performance is a significant pain point with Python. There are multiple facets to the performance problem:
> * Startup overhead
> * General performance overhead compared to native code
> * GIL interfering with parallel execution
> It takes several dozen milliseconds to start a Python interpreter and load the Mercurial Python modules. If you have many extensions loaded, it could take well over 100ms just to effectively get to a Mercurial command's main function. Reports of over 250ms are known. While the command itself may complete in mere milliseconds, Python overhead has already made hg seem non-instantaneous to end-users.
miohtama 2021-08-16 13:42:08 +0000 UTC [ - ]
IshKebab 2021-08-16 18:14:06 +0000 UTC [ - ]
For example if you're using Python to process a lot of files via Make (something my work's build system does unfortunately) then it can end up costing 10s of seconds which is kind of insane.
mst 2021-08-16 17:14:31 +0000 UTC [ - ]
watermelon0 2021-08-16 12:43:57 +0000 UTC [ - ]
However, situation is similar with nodejs.
gizdan 2021-08-16 08:32:35 +0000 UTC [ - ]
philsnow 2021-08-16 08:42:31 +0000 UTC [ - ]
> Plumbum (Latin for lead, which was used to create pipes back in the day)
gizdan 2021-08-16 14:24:20 +0000 UTC [ - ]
marcusramberg 2021-08-16 09:46:40 +0000 UTC [ - ]
mst 2021-08-16 17:12:40 +0000 UTC [ - ]
dogma1138 2021-08-16 10:52:20 +0000 UTC [ - ]
bovermyer 2021-08-16 14:27:34 +0000 UTC [ - ]
Personally, I only see it as the old name for lead. Interesting to see how others are wired.
FroshKiller 2021-08-16 11:30:51 +0000 UTC [ - ]
mst 2021-08-16 17:13:22 +0000 UTC [ - ]
hnarn 2021-08-16 15:46:03 +0000 UTC [ - ]
um… what?
FinalBriefing 2021-08-16 15:58:38 +0000 UTC [ - ]
I know a bit of bash, but I'm always looking up how to do things I know are simple in JS. I would love to be able to write scripts in JS because I'm faster with it, and I find it easier to read.
gbear0 2021-08-16 17:45:08 +0000 UTC [ - ]
#!/usr/bin/env node
console.log("Hello World!");
rickstanley 2021-08-16 18:21:31 +0000 UTC [ - ]
- https://tc39.es/proposal-hashbang/out.html
- https://github.com/tc39/proposal-hashbang
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
thex10 2021-08-16 16:11:31 +0000 UTC [ - ]
Not saying it doesn't happen, just that it hasn't been my experience.
lloydatkinson 2021-08-16 17:03:30 +0000 UTC [ - ]
kakuri 2021-08-16 18:00:38 +0000 UTC [ - ]
SCLeo 2021-08-16 18:04:34 +0000 UTC [ - ]
I think these are some reasons why our mileages differ:
- I need my scripts to work in both Windows and Linux.
- I am not very experienced with bash or other shell.
- Most of my "automation work" only involves reading text from a file, transform it, and write to another file. (Generating SQL commands, doing stats about town names, etc.)
shell0x 2021-08-17 00:44:26 +0000 UTC [ - ]
I came across Bash, Powershell, Ruby, Python, Go, Rust, Perl, but JS?
soheil 2021-08-16 15:58:49 +0000 UTC [ - ]
runawaybottle 2021-08-16 16:04:24 +0000 UTC [ - ]
xemdetia 2021-08-16 16:30:27 +0000 UTC [ - ]
soheil 2021-08-16 16:53:48 +0000 UTC [ - ]
egeozcan 2021-08-16 17:40:20 +0000 UTC [ - ]
mikevm 2021-08-16 09:16:55 +0000 UTC [ - ]
lucideer 2021-08-16 10:00:59 +0000 UTC [ - ]
The author of this library has chosen to make the "$" function they provide async; this isn't a JS design feature or limitation, it's just the lib author's choice.
Too 2021-08-16 14:04:46 +0000 UTC [ - ]
You frequently see the same mental mismatch when shell-scripters try to use Python, and complain how hard it is to pipe with POpen, instead of using the built in string processing features.
lhnz 2021-08-16 10:59:11 +0000 UTC [ - ]
Although this would be fighting the language...
tgsovlerkhgsel 2021-08-16 12:51:09 +0000 UTC [ - ]
I've seen so many cases of processes being synchronous simply because doing it differently would require an unrealistic amount of custom parallelism code.
TeMPOraL 2021-08-16 09:00:12 +0000 UTC [ - ]
DaGardner 2021-08-16 09:00:49 +0000 UTC [ - ]
kleiba 2021-08-16 09:28:06 +0000 UTC [ - ]
marton78 2021-08-16 09:46:07 +0000 UTC [ - ]
TeMPOraL 2021-08-16 10:19:09 +0000 UTC [ - ]
But in the spirit of "there are only two business models - bundling and unbundling", I guess there are only two marketing tricks: use an old term for a new thing, and introduce a new term for an old thing...
zeroxfe 2021-08-16 13:17:21 +0000 UTC [ - ]
TeMPOraL 2021-08-16 13:48:54 +0000 UTC [ - ]
Take that payment system. People who buy things are obviously users, people who write CMS plugins for that system are obviously developers. But what about, say, analysts studying reports from that system? Accountants making sure the money flows where it should? Sysadmins keeping the backend components running? These are all users too.
Where UX makes sense as a broad concept, giving a separate acronym to one small subset of potential users... doesn't make sense.
zeroxfe 2021-08-16 18:02:46 +0000 UTC [ - ]
hnlmorg 2021-08-16 09:44:48 +0000 UTC [ - ]
ggambetta 2021-08-16 12:58:11 +0000 UTC [ - ]
ilaksh 2021-08-16 09:13:09 +0000 UTC [ - ]
#!/usr/bin/env zx
#define _ await $
#define __ await Promise.all
#define _1 process.argv[1]
#define _2 process.argv[1]
#define _3 process.argv[1]
_`cat package.json | grep name`
let branch = _`git branch --show-current`
_`dep deploy --branch=${branch}`
__([
$`sleep 1; echo 1`,
$`sleep 2; echo 2`,
$`sleep 3; echo 3`,
])
let name = 'foo bar'
_`mkdir /tmp/${_1}`
williamdclt 2021-08-16 09:21:58 +0000 UTC [ - ]
ilaksh 2021-08-16 15:55:13 +0000 UTC [ - ]
For this specific use case, they are trying to replace shell scripts. So I thought maybe some people might be willing to consider abbreviations for the async and await keywords for this case.
masklinn 2021-08-16 09:38:55 +0000 UTC [ - ]
jpxw 2021-08-16 10:56:07 +0000 UTC [ - ]
Maybe I’m just being paranoid.
tgsovlerkhgsel 2021-08-16 12:53:51 +0000 UTC [ - ]
The node ecosystem is built around having third-party dependencies for everything, which makes it impossible to meaningfully vet the code you're running, and once a dependency gets hijacked, all its dependencies are screwed too.
shell0x 2021-08-17 00:41:55 +0000 UTC [ - ]
I usually go with bash + set -euxo pipefail and if it becomes too complicated I switch to Python.
GoLang/Rust are the perfect tool when distributing tools as a single binare. Where in the world does JS fit in?
lixtra 2021-08-16 15:24:40 +0000 UTC [ - ]
await $`dep deploy --branch=${branch}`
…
await $`mkdir /tmp/${name}`
Code like this[1] looks prone to shell injectionmst 2021-08-16 17:18:59 +0000 UTC [ - ]
> The zx package provides useful wrappers around child_process, escapes arguments and gives sensible defaults.
lit-html and at least one SQL generating package I've seen use the template string custom interpolation mechanism to auto-escape things - it's a pretty established pattern at this point in javascript land ... but also, yes, until you learn that, it totally does look prone to injection. I've got in the habit of going and finding the template string interpolation function and double checking, because otherwise I find it hard to convince my brain to believe it isn't prone to injection and it interferes with my skim reading the code ;)
pitaj 2021-08-16 15:38:01 +0000 UTC [ - ]
They could also be parsing out the first word as the command and not using shell execution at all.
bokchoi 2021-08-16 18:34:13 +0000 UTC [ - ]
kcartlidge 2021-08-16 18:43:45 +0000 UTC [ - ]
I was disappointed this link didn't go to another ZX Spectrum emulator :(
soheil 2021-08-16 15:56:55 +0000 UTC [ - ]
console.log(`Files count: ${count}`)
missing $
ptx 2021-08-16 17:37:06 +0000 UTC [ - ]
[1] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
haolez 2021-08-16 16:19:48 +0000 UTC [ - ]
another-dave 2021-08-16 14:08:18 +0000 UTC [ - ]
Great that it's under active development, but changes to my scripts are infrequent and slow. I wouldn't want to be touching an old script on a server somewhere saying "How do I do X in ZX again?" and everything I find online is now for v15 while I'm still on v3.
Maybe if it had plans around a LTS version I'd take a look at that stage.
To be honest though I like doing things in bash. You can get pretty far & it's 100% portable. If something's too complicated for bash it's probably time it's not just a simple CLI script anymore, in my experience.
2021-08-16 17:23:40 +0000 UTC [ - ]
Stampo00 2021-08-16 18:35:44 +0000 UTC [ - ]
SevenSigs 2021-08-16 15:49:56 +0000 UTC [ - ]
Would you feel better if they called version three v1.9 instead?
FinalBriefing 2021-08-16 15:59:37 +0000 UTC [ - ]
If there are no breaking changes, then I would feel better if they called it v1.9.
staticassertion 2021-08-16 16:01:13 +0000 UTC [ - ]
SevenSigs 2021-08-17 01:30:27 +0000 UTC [ - ]