AnotherTest
66b26fc1c2
Shell: Fix wrong step value for brace ranges
...
This fixes numeric ranges like {1..10}.
2020-12-29 16:55:43 +01:00
AnotherTest
5e5eb615ec
Shell: Add runtime errors and implement break/continue
...
Such errors are raised when SyntaxError nodes are executed, and are also
used for internal control flow.
The 'break' and 'continue' commands are currently only allowed inside
for loops, and outside function bodies.
This also adds a 'loop' keyword for infinite loops.
2020-12-29 16:55:43 +01:00
AnotherTest
9bd81f34a5
Shell: Make for/match/functions put their variables only in the new scope
...
Otherwise, a function would, for example, overwrite its parent scope:
```sh
foo(x) { }
x=1
foo 2 # would make x=2 otherwise
```
2020-12-29 16:55:43 +01:00
AnotherTest
97c5a78d27
Shell: Add a 'glob' builtin
...
This builtin takes a bunch of strings, resolves them as globs (in the
current directory) and prints out the matching entries.
Its main use is to allow dynamic glob resolution:
```sh
glob "$whatever/*"
```
2020-12-29 16:55:43 +01:00
Linus Groh
3d7b8de64f
Shell: Don't run commands with failing redirections
...
Fixes #3423 .
2020-12-16 23:26:19 +01:00
AnotherTest
4668dfa7c7
Shell: Make Subshell actually create a subshell
...
Previously, a "subshell" would just be executed in the parent shell.
2020-12-15 20:58:32 +01:00
AnotherTest
a2879f53c8
Shell: Restore the terminal PGID before printing out job status on exit
...
This fixes the assert tripping when interrupting a foreground job.
Also make `bg` mark the job as 'should announce exit'.
2020-12-10 16:20:39 +01:00
AnotherTest
17e1e1f114
Shell: Actually make shebangs work
...
Also check for executable permissions before actually trying to run, and
print a helpful message if not executable.
Fixes #4358
2020-12-08 23:34:38 +01:00
AnotherTest
0141f7e7fd
Shell: Avoid recreating the event loop before exec()
...
This stops the local socket creation spam.
2020-12-08 23:34:38 +01:00
AnotherTest
cd8268e6fb
Shell: Put background jobs into new process groups too
...
Fixes #4345 .
This was done in 54b453b in the name of "fixing event loop processing in
subshells", but I do not see how a new PGID is supposed to affect the event
loop.
This seems to have been done by mistake, let's see if any tests fail
because of this.
2020-12-08 23:34:38 +01:00
AnotherTest
59b46a1f51
Shell: Show termination signal if job did not exit cleanly
2020-12-08 23:34:38 +01:00
AnotherTest
48a1f7e55c
Shell: Silence TCSETPGRP errors when not interactive
2020-12-08 23:34:38 +01:00
AnotherTest
57728ef29f
Shell: Replace all dbg()'s with dbgln()
2020-12-08 23:34:38 +01:00
AnotherTest
5325d6871d
Shell: Make <return> go to a new line when the command is incomplete
...
"incomplete" meaning that it has a syntax error that can be recovered
from by continuing the input.
2020-12-08 23:34:38 +01:00
AnotherTest
62bd1adb06
Shell: Replace one more user-controlled assert with a syntax error
...
test-case: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=28114&q=label%3AProj-serenity
2020-12-03 10:51:56 +01:00
AnotherTest
9d9347cd5a
Shell: Fix bad cast to BarewordLiteral
...
As found by oss-fuzz: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=28109&q=label%3AProj-serenity
2020-12-03 10:51:56 +01:00
AnotherTest
50b7122798
Shell: Error out when an expression is nested too deep
...
That can happen with too many nested parenthesis, for instance.
This commit sets the maximum allowed limit to 2048 (seems relatively
safe for normal code).
Found by oss-fuzz: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=28105&q=label%3AProj-serenity
2020-11-30 17:45:15 +01:00
AnotherTest
e4bd5a5d69
Shell: Fix some at_end() bugs and use syntax errors instead of asserting
...
...in cases where the assert can be directly caused by user input.
2020-11-29 16:22:44 +01:00
Lenny Maiorani
0cb16ffe08
Shell: Remove unused private member and includes
...
Problem:
- Clang reports unused private member warning in the `Shell::Formatter`.
- Vector is not used in the `Shell::Formatter`.
Solution:
- Remove unused private member variable.
- Remove unused includes.
2020-11-17 09:48:02 +01:00
AnotherTest
1aed61964a
Shell: Do not leak the value of ARGV in nested function calls
2020-11-01 18:45:05 +01:00
AnotherTest
e87e580eb3
Shell: Search for variables in the last frame first
...
Otherwise, we'll end up overwriting another frame's variables if the
names match up.
2020-11-01 18:45:05 +01:00
AnotherTest
bedad383b5
Shell: Store LocalFrames as NonnullOwnPtr<LocalFrame> instead
...
As Vector<T> will relocate objects to resize, we cannot assume that the
address of a specific LocalFrame will stay constant, or that the
reference will not be dangling to begin with.
Fixes an assertion that fires when a frame push causes the Vector to
reallocate.
2020-11-01 18:45:05 +01:00
AnotherTest
1a4ac3531f
Shell: Allow parts of globs to be named in match expressions
...
This patchset allows a match expression to have a list of names for its
glob parts, which are assigned to the matched values in the body of the
match.
For example,
```sh
stuff=foobarblahblah/target_{1..30}
for $stuff {
match $it {
*/* as (dir sub) {
echo "doing things with $sub in $dir"
make -C $dir $sub # or whatever...
}
}
}
```
With this, match expressions are now significantly more powerful!
2020-10-29 11:53:01 +01:00
AnotherTest
2d6d1ca67f
Shell: Add some basic tests for backgrounding
2020-10-29 11:53:01 +01:00
AnotherTest
6e2a383f25
Shell: Wait for the rest of the members of a pipeline when one exits
...
Assuming we were blocking on one to begin with.
2020-10-29 11:53:01 +01:00
AnotherTest
c92865bd05
Shell: Use kill_job() to kill jobs
2020-10-29 11:53:01 +01:00
AnotherTest
384e872ff9
Shell: Add redirections to the formatted command string
2020-10-29 11:53:01 +01:00
AnotherTest
a46318d414
Shell: Do not bail early when printing jobs if waitpid() fails
...
This fixes running `jobs` in a child process.
Also makes sure that stdout is flushed when writing jobs out.
2020-10-29 11:53:01 +01:00
AnotherTest
f4b7a688b1
Shell: Rename {source,dest}_fd to {old,new}_fd
...
This makes `Rewiring' much more understandable, and un-confuses the uses
of `dup2()'.
Also fixes `dup2()' bugs.
2020-10-29 11:53:01 +01:00
AnotherTest
0bc758d34a
Shell: Run builtins that cannot be run in the main process in a new child
...
e.g. `$(jobs | wc -l)` would blow up horribly otherwise.
(it still does)
2020-10-29 11:53:01 +01:00
AnotherTest
a8c18f9fd2
Shell: Drop all the jobs after killing them in stop_all_jobs()
2020-10-29 11:53:01 +01:00
AnotherTest
2610477836
Shell: Only prompt the user for a second 'exit' when in interactive mode
2020-10-29 11:53:01 +01:00
AnotherTest
71bb62d03c
Shell: Add the `wait' builtin
...
This builtin...waits...for the jobs it's given (or all the existing
jobs).
2020-10-29 11:53:01 +01:00
AnotherTest
76a2c6e44d
Shell: Fix cd' history (and cdh')
...
Previously, `cd` would push relative paths (and possibly nonexistent
ones too) into its history, so `cdh' would fail everywhere else.
2020-10-26 14:28:38 +01:00
AnotherTest
6d7b01a3cf
Shell: Use kill() in fg/bg if killpg() fails
...
A job might not have its own pgid if it's created through run_tail().
2020-10-26 14:28:38 +01:00
AnotherTest
5a4673d468
Shell: Ensure that jobs going through run_tail() retain should_wait
...
This allows putting logic in the background as well.
2020-10-26 14:28:38 +01:00
AnotherTest
9ad858bcbf
Shell: Make the ENSURE_WAITID_ONCE requirements a bit less strict
...
waitid() *may* be called many times if a job does not exit, so only
assert this fact when the job has in fact exited.
Also allows Background nodes to contain non-execute nodes.
2020-10-26 14:28:38 +01:00
AnotherTest
8de70e8ce7
Shell: Implement AK::Formatter::format() for AST::Command
...
...and use that to display jobs.
2020-10-26 14:28:38 +01:00
Linus Groh
4a4b1b1131
Shell: Support HISTFILE environment variable
...
This allows changing the Shell's history file path.
2020-10-26 11:27:54 +01:00
Linus Groh
b2e4fe1299
Shell+LibLine: Move Shell::{load,save}_history() to Line::Editor
...
This allows us to easily re-use history loading and saving in other
programs using Line::Editor, as well as implementing universally
recognized HISTCONTROL.
2020-10-26 11:27:54 +01:00
AnotherTest
956e9aa736
Shell: Fix off-by-one in EOL mark printing
...
Fixes #3844 .
2020-10-25 16:39:18 +01:00
AnotherTest
f7dbd14a87
Shell: Add some tests for brace expansions
2020-10-25 10:09:27 +01:00
AnotherTest
5640e1bc3a
Shell: Add support for brace expansions
...
This adds support for (basic) brace expansions with the following
syntaxes:
- `{expr?,expr?,expr?,...}` which is directly equivalent to `(expr expr
expr ...)`, with the missing expressions replaced with an empty string
literal.
- `{expr..expr}` which is a new range expansion, with two modes:
- if both expressions are one unicode code point long, the range is
equivalent to the two code points and all code points between the
two (numerically).
- if both expressions are numeric, the range is equivalent to both
numbers, and all numbers between the two.
- otherwise, it is equivalent to `(expr expr)`.
Closes #3832 .
2020-10-25 10:09:27 +01:00
Andreas Kling
1d96ecf148
Everywhere: Add missing <AK/TemporaryChange.h> includes
...
Don't rely on HashTable.h pulling this in.
2020-10-15 23:49:53 +02:00
AnotherTest
b1b202124c
Shell: Use Node::kind() instead of Node::class_name() in formatter
2020-10-14 21:05:39 +02:00
AnotherTest
738f512919
Shell: Respect input sources' blank lines between sequences
...
But collapse them to a single empty line.
This makes the generated sources look significantly better.
2020-10-14 21:05:39 +02:00
AnotherTest
cd48ec2abd
Shell: Put a space after the match pattern expression when formatting
2020-10-14 21:05:39 +02:00
Matthew L. Curry
5d5c32cec1
Style: Remove uses of NULL, substituting nullptr
2020-10-13 13:52:52 +02:00
AnotherTest
7f3e1fa826
Shell: Fix closest command node detection in Pipes and Sequences
...
This makes --option completions work for pipes and sequences too.
2020-10-04 23:12:28 +02:00
AnotherTest
a9cee8ee02
Shell+LibLine: Record the input offset of completions
...
This makes the completion entry retain information about how much of the
suggestion was part of the string that caused the match.
2020-10-04 23:12:28 +02:00