45 lines
2.1 KiB
Plaintext
45 lines
2.1 KiB
Plaintext
= Shell vs Exec
|
|
|
|
OliveTin supports two different methods to run commands: `shell` and `exec`. The difference between these two is that "shell" accepts strings, and will wrap that whole command in a shell with "bash -c". Exec uses a syscall directly to execute commands.
|
|
|
|
* **Shell** is more flexible, because it allows you to chain commands (eg, using &&) and redirect or pipe output (eg: ">" or "|").
|
|
* **Exec** is more secure, because it does not invoke a shell, and thus avoids shell injection attacks.
|
|
|
|
Shell can be safe and secure with simple argument types (like ascii_identifier), but some argument types like URL can contain basically any character - /, :, ?, &, etc - which can lead to shell injection vulnerabilities while still being a valid URL.
|
|
|
|
OliveTin will try and prevent you from using dangerous characters in shell commands (eg, URL is no longer permitted with Shell).
|
|
|
|
The way that you specify these two types of execution is different - `shell` expects a single string, while `exec` expects a list of strings (the first being the command, the rest being the arguments).
|
|
|
|
[source,yaml]
|
|
.Using Shell
|
|
----
|
|
actions:
|
|
- title: List files
|
|
shell: ls -l /some/directory
|
|
----
|
|
|
|
[source,yaml]
|
|
.Using Exec
|
|
----
|
|
actions:
|
|
- title: List files
|
|
exec:
|
|
- ls
|
|
- -l
|
|
- /some/directory
|
|
----
|
|
|
|
When in doubt, prefer `exec` over `shell` for better security. Shell was added in both OliveTin 3k and OliveTin 2k in October 2025.
|
|
|
|
== What's Next?
|
|
|
|
Now that you understand execution methods, continue building your actions:
|
|
|
|
* xref:action_execution/create_your_first.adoc[Create your first action] - Build a simple action to get started
|
|
* xref:args/intro.adoc[Add arguments to actions] - Make actions interactive with user input
|
|
* xref:action_execution/oncron.adoc[Schedule actions] - Set up automated execution
|
|
* xref:action_execution/onwebhook.adoc[Trigger via webhooks] - Integrate with external systems
|
|
* xref:security/concepts.adoc[Configure security] - Secure your actions with authentication and authorization
|
|
* xref:action_examples/intro.adoc[Browse examples] - See real-world action configurations
|