2024-01-01 21:07:12 +01:00
|
|
|
<p align="center">
|
2023-12-16 10:23:31 +01:00
|
|
|
<picture>
|
|
|
|
<source media="(prefers-color-scheme: dark)" srcset="https://github.com/atuinsh/atuin/assets/53315310/13216a1d-1ac0-4c99-b0eb-d88290fe0efd">
|
|
|
|
<img alt="Text changing depending on mode. Light: 'So light!' Dark: 'So dark!'" src="https://github.com/atuinsh/atuin/assets/53315310/08bc86d4-a781-4aaa-8d7e-478ae6bcd129">
|
|
|
|
</picture>
|
2022-05-10 12:47:08 +02:00
|
|
|
</p>
|
2021-02-14 17:23:08 +01:00
|
|
|
|
2021-04-26 12:59:00 +02:00
|
|
|
<p align="center">
|
|
|
|
<em>magical shell history</em>
|
|
|
|
</p>
|
|
|
|
|
2022-05-10 12:47:08 +02:00
|
|
|
<hr/>
|
|
|
|
|
2021-02-14 17:23:08 +01:00
|
|
|
<p align="center">
|
2023-07-31 00:08:00 +02:00
|
|
|
<a href="https://github.com/atuinsh/atuin/actions?query=workflow%3ARust"><img src="https://img.shields.io/github/actions/workflow/status/atuinsh/atuin/rust.yml?style=flat-square" /></a>
|
2021-02-14 17:23:08 +01:00
|
|
|
<a href="https://crates.io/crates/atuin"><img src="https://img.shields.io/crates/v/atuin.svg?style=flat-square" /></a>
|
|
|
|
<a href="https://crates.io/crates/atuin"><img src="https://img.shields.io/crates/d/atuin.svg?style=flat-square" /></a>
|
2023-07-31 00:08:00 +02:00
|
|
|
<a href="https://github.com/atuinsh/atuin/blob/main/LICENSE"><img src="https://img.shields.io/crates/l/atuin.svg?style=flat-square" /></a>
|
2022-03-17 22:21:27 +01:00
|
|
|
<a href="https://discord.gg/Fq8bJSKPHh"><img src="https://img.shields.io/discord/954121165239115808" /></a>
|
2023-02-28 23:29:34 +01:00
|
|
|
<a rel="me" href="https://hachyderm.io/@atuin"><img src="https://img.shields.io/mastodon/follow/109944632283122560?domain=https%3A%2F%2Fhachyderm.io&style=social"/></a>
|
2023-02-28 23:27:06 +01:00
|
|
|
<a href="https://twitter.com/atuinsh"><img src="https://img.shields.io/twitter/follow/atuinsh?style=social" /></a>
|
2023-12-12 16:33:19 +01:00
|
|
|
<a href="https://actuated.dev/"><img alt="Arm CI sponsored by Actuated" src="https://docs.actuated.dev/images/actuated-badge.png" width="120px"></img></a>
|
2021-02-14 17:23:08 +01:00
|
|
|
</p>
|
2021-04-26 15:25:57 +02:00
|
|
|
|
2022-05-10 12:47:08 +02:00
|
|
|
|
|
|
|
[English] | [简体中文]
|
|
|
|
|
|
|
|
|
|
|
|
Atuin replaces your existing shell history with a SQLite database, and records
|
|
|
|
additional context for your commands. Additionally, it provides optional and
|
|
|
|
_fully encrypted_ synchronisation of your history between machines, via an Atuin
|
2024-05-13 04:35:34 +02:00
|
|
|
server.
|
2022-05-10 12:47:08 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-04-26 15:25:57 +02:00
|
|
|
<p align="center">
|
|
|
|
<img src="demo.gif" alt="animated" width="80%" />
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<p align="center">
|
|
|
|
<em>exit code, duration, time and command shown</em>
|
|
|
|
</p>
|
|
|
|
|
2022-05-01 10:25:12 +02:00
|
|
|
|
2022-05-10 12:47:08 +02:00
|
|
|
|
|
|
|
|
2021-05-07 17:58:57 +02:00
|
|
|
|
|
|
|
As well as the search UI, it can do things like this:
|
|
|
|
|
|
|
|
```
|
|
|
|
# search for all successful `make` commands, recorded after 3pm yesterday
|
|
|
|
atuin search --exit 0 --after "yesterday 3pm" make
|
|
|
|
```
|
|
|
|
|
|
|
|
You may use either the server I host, or host your own! Or just don't use sync
|
|
|
|
at all. As all history sync is encrypted, I couldn't access your data even if
|
|
|
|
I wanted to. And I **really** don't want to.
|
|
|
|
|
|
|
|
## Features
|
|
|
|
|
2022-12-24 18:18:44 +01:00
|
|
|
- rebind `ctrl-r` and `up` (configurable) to a full screen history search UI
|
2021-04-25 19:21:52 +02:00
|
|
|
- store shell history in a sqlite database
|
2024-01-10 09:22:35 +01:00
|
|
|
- back up and sync **encrypted** shell history
|
2021-05-07 17:58:57 +02:00
|
|
|
- the same history across terminals, across sessions, and across machines
|
2021-04-25 19:21:52 +02:00
|
|
|
- log exit code, cwd, hostname, session, command duration, etc
|
|
|
|
- calculate statistics such as "most used command"
|
|
|
|
- old history file is not replaced
|
2021-05-10 22:28:07 +02:00
|
|
|
- quick-jump to previous items with <kbd>Alt-\<num\></kbd>
|
2022-04-22 22:05:02 +02:00
|
|
|
- switch filter modes via ctrl-r; search history just from the current session, directory, or globally
|
2024-01-10 09:18:47 +01:00
|
|
|
- enter to execute a command, tab to edit
|
2021-04-25 19:21:52 +02:00
|
|
|
|
|
|
|
## Documentation
|
|
|
|
|
|
|
|
- [Quickstart](#quickstart)
|
|
|
|
- [Install](#install)
|
2023-02-26 00:29:59 +01:00
|
|
|
- [Import](https://atuin.sh/docs/commands/import)
|
|
|
|
- [Configuration](https://atuin.sh/docs/config)
|
|
|
|
- [Searching history](https://atuin.sh/docs/commands/search)
|
|
|
|
- [Cloud history sync](https://atuin.sh/docs/commands/sync)
|
|
|
|
- [History stats](https://atuin.sh/docs/commands/stats)
|
|
|
|
- [Self host Atuin server](https://atuin.sh/docs/self-hosting)
|
2023-08-17 22:42:57 +02:00
|
|
|
- [Key binding](https://atuin.sh/docs/key-binding)
|
2023-02-26 00:29:59 +01:00
|
|
|
- [Shell completions](https://atuin.sh/docs/commands/shell-completions)
|
2021-02-13 21:54:35 +01:00
|
|
|
|
2021-02-16 00:33:30 +01:00
|
|
|
## Supported Shells
|
|
|
|
|
|
|
|
- zsh
|
2021-04-26 12:50:31 +02:00
|
|
|
- bash
|
2021-12-11 10:48:53 +01:00
|
|
|
- fish
|
2023-03-26 16:44:31 +02:00
|
|
|
- nushell
|
2024-01-29 13:17:36 +01:00
|
|
|
- xonsh
|
2024-05-13 04:35:34 +02:00
|
|
|
|
2022-03-17 22:21:27 +01:00
|
|
|
## Community
|
|
|
|
|
2023-12-13 00:42:14 +01:00
|
|
|
### Forum
|
|
|
|
|
|
|
|
Atuin has a community forum, please ask here for help and support: https://forum.atuin.sh/
|
|
|
|
|
|
|
|
### Discord
|
|
|
|
|
2023-12-31 20:14:24 +01:00
|
|
|
Atuin also has a community Discord, available [here](https://discord.gg/jR3tfchVvW)
|
2021-02-16 00:33:30 +01:00
|
|
|
|
2021-04-25 19:21:52 +02:00
|
|
|
# Quickstart
|
2024-05-13 04:35:34 +02:00
|
|
|
|
2021-08-11 18:59:28 +02:00
|
|
|
## With the default sync server
|
2024-05-13 04:35:34 +02:00
|
|
|
|
2021-08-11 18:59:28 +02:00
|
|
|
This will sign you up for the default sync server, hosted by me. Everything is end-to-end encrypted, so your secrets are safe!
|
2024-05-13 04:35:34 +02:00
|
|
|
|
2021-08-11 18:59:28 +02:00
|
|
|
Read more below for offline-only usage, or for hosting your own server.
|
2021-04-25 19:21:52 +02:00
|
|
|
|
|
|
|
```
|
2023-12-14 09:19:51 +01:00
|
|
|
# bash/zsh/etc
|
2023-12-14 09:04:54 +01:00
|
|
|
bash <(curl --proto '=https' --tlsv1.2 -sSf https://setup.atuin.sh)
|
2021-04-25 19:21:52 +02:00
|
|
|
|
2023-12-14 09:19:51 +01:00
|
|
|
# fish
|
|
|
|
bash (curl --proto '=https' --tlsv1.2 -sSf https://setup.atuin.sh | psub)
|
|
|
|
|
2023-05-16 23:03:53 +02:00
|
|
|
atuin register -u <USERNAME> -e <EMAIL>
|
2021-04-25 19:21:52 +02:00
|
|
|
atuin import auto
|
|
|
|
atuin sync
|
|
|
|
```
|
2023-02-10 10:08:42 +01:00
|
|
|
|
|
|
|
Then restart your shell!
|
2024-04-09 13:41:31 +02:00
|
|
|
|
|
|
|
> [!NOTE]
|
|
|
|
>
|
|
|
|
> **For Bash users**: The above sets up `bash-preexec` for necessary hooks, but
|
|
|
|
> `bash-preexec` has limitations. For details, please see the [Bash](#bash)
|
|
|
|
> section below.
|
|
|
|
|
2021-08-11 18:59:28 +02:00
|
|
|
## Offline only (no sync)
|
2024-05-13 04:35:34 +02:00
|
|
|
|
2021-08-11 18:59:28 +02:00
|
|
|
```
|
2023-07-31 00:08:00 +02:00
|
|
|
bash <(curl https://raw.githubusercontent.com/atuinsh/atuin/main/install.sh)
|
2024-05-13 04:35:34 +02:00
|
|
|
|
2021-08-11 18:59:28 +02:00
|
|
|
atuin import auto
|
|
|
|
```
|
2023-05-09 13:18:04 +02:00
|
|
|
|
|
|
|
By default, Atuin will check for updates. You can [disable update checks by modifying](https://atuin.sh/docs/config/#update_check) `config.toml`.
|
2021-04-25 19:21:52 +02:00
|
|
|
|
2023-02-10 10:08:42 +01:00
|
|
|
Then restart your shell!
|
|
|
|
|
2021-02-13 21:54:35 +01:00
|
|
|
## Install
|
|
|
|
|
2024-01-03 17:41:25 +01:00
|
|
|
<details>
|
|
|
|
<summary>Packaging status</summary>
|
|
|
|
<a href="https://repology.org/project/atuin/versions">
|
|
|
|
<img src="https://repology.org/badge/vertical-allrepos/atuin.svg?columns=3" alt="Packaging status">
|
|
|
|
</a>
|
|
|
|
</details>
|
|
|
|
|
2021-04-26 12:50:31 +02:00
|
|
|
### Script (recommended)
|
2021-02-16 00:33:30 +01:00
|
|
|
|
2021-04-26 12:50:31 +02:00
|
|
|
The install script will help you through the setup, ensuring your shell is
|
|
|
|
properly configured. It will also use one of the below methods, preferring the
|
2021-12-09 23:51:55 +01:00
|
|
|
system package manager where possible (pacman, homebrew, etc etc).
|
2021-02-16 00:33:30 +01:00
|
|
|
|
2021-02-15 00:33:14 +01:00
|
|
|
```
|
2021-04-26 12:50:31 +02:00
|
|
|
# do not run this as root, root will be asked for if required
|
2023-07-31 00:08:00 +02:00
|
|
|
bash <(curl https://raw.githubusercontent.com/atuinsh/atuin/main/install.sh)
|
2021-02-15 00:33:14 +01:00
|
|
|
```
|
|
|
|
|
2022-10-08 05:36:49 +02:00
|
|
|
And then follow [the shell setup](#shell-plugin)
|
|
|
|
|
2021-02-15 00:33:14 +01:00
|
|
|
### With cargo
|
2021-02-16 00:33:30 +01:00
|
|
|
|
2021-04-25 19:21:52 +02:00
|
|
|
It's best to use [rustup](https://rustup.rs/) to get setup with a Rust
|
|
|
|
toolchain, then you can run:
|
2021-02-13 21:54:35 +01:00
|
|
|
|
2021-02-14 19:20:18 +01:00
|
|
|
```
|
2021-02-15 00:33:14 +01:00
|
|
|
cargo install atuin
|
2021-02-14 19:20:18 +01:00
|
|
|
```
|
2024-05-13 04:35:34 +02:00
|
|
|
|
2022-05-20 00:34:29 +02:00
|
|
|
And then follow [the shell setup](#shell-plugin)
|
2021-02-14 19:20:18 +01:00
|
|
|
|
2021-05-08 16:06:40 +02:00
|
|
|
### Homebrew
|
|
|
|
|
|
|
|
```
|
|
|
|
brew install atuin
|
|
|
|
```
|
2024-05-13 04:35:34 +02:00
|
|
|
|
2022-05-20 00:34:29 +02:00
|
|
|
And then follow [the shell setup](#shell-plugin)
|
2024-05-13 04:35:34 +02:00
|
|
|
|
2022-04-14 00:49:38 +02:00
|
|
|
### MacPorts
|
|
|
|
|
2024-05-13 04:35:34 +02:00
|
|
|
Atuin is also available in [MacPorts](https://ports.macports.org/port/atuin/)
|
|
|
|
|
2022-04-14 00:49:38 +02:00
|
|
|
```
|
|
|
|
sudo port install atuin
|
|
|
|
```
|
2024-05-13 04:35:34 +02:00
|
|
|
|
2022-05-20 00:34:29 +02:00
|
|
|
And then follow [the shell setup](#shell-plugin)
|
2021-05-08 16:06:40 +02:00
|
|
|
|
2024-04-08 14:12:37 +02:00
|
|
|
### Cave
|
|
|
|
|
|
|
|
Atuin is available in the Exherbo Linux [rust repository](https://gitlab.exherbo.org/exherbo/rust/-/tree/master/packages/app-shells/atuin):
|
|
|
|
|
|
|
|
```
|
|
|
|
cave resolve -x repository/rust
|
|
|
|
cave resolve -x atuin
|
|
|
|
```
|
|
|
|
|
2023-02-15 10:04:07 +01:00
|
|
|
### Nix
|
|
|
|
|
|
|
|
This repository is a flake, and can be installed using `nix profile`:
|
|
|
|
|
|
|
|
```
|
2023-07-31 00:08:00 +02:00
|
|
|
nix profile install "github:atuinsh/atuin"
|
2023-02-15 10:04:07 +01:00
|
|
|
```
|
|
|
|
|
|
|
|
Atuin is also available in [nixpkgs](https://github.com/NixOS/nixpkgs):
|
|
|
|
|
|
|
|
```
|
|
|
|
nix-env -f '<nixpkgs>' -iA atuin
|
|
|
|
```
|
|
|
|
|
|
|
|
And then follow [the shell setup](#shell-plugin)
|
2021-12-09 23:51:55 +01:00
|
|
|
### Pacman
|
2021-04-26 12:50:31 +02:00
|
|
|
|
2023-05-30 11:49:00 +02:00
|
|
|
Atuin is available in the Arch Linux [[extra] repository](https://archlinux.org/packages/extra/x86_64/atuin/):
|
2021-04-26 12:50:31 +02:00
|
|
|
|
|
|
|
```
|
2021-12-09 23:51:55 +01:00
|
|
|
pacman -S atuin
|
2021-04-26 12:50:31 +02:00
|
|
|
```
|
2024-05-13 04:35:34 +02:00
|
|
|
|
2022-05-20 00:34:29 +02:00
|
|
|
And then follow [the shell setup](#shell-plugin)
|
2021-04-26 12:50:31 +02:00
|
|
|
|
2023-12-14 09:19:42 +01:00
|
|
|
### Xbps
|
|
|
|
|
|
|
|
Atuin is available in the Void Linux [repository](https://github.com/void-linux/void-packages/tree/master/srcpkgs/atuin):
|
|
|
|
|
|
|
|
```
|
|
|
|
sudo xbps-install atuin
|
|
|
|
```
|
|
|
|
|
|
|
|
And then follow [the shell setup](#shell-plugin)
|
|
|
|
|
2022-09-25 18:14:51 +02:00
|
|
|
### Termux
|
|
|
|
|
|
|
|
Atuin is available in the Termux package repository:
|
|
|
|
|
|
|
|
```
|
|
|
|
pkg install atuin
|
|
|
|
```
|
2024-05-13 04:35:34 +02:00
|
|
|
|
2022-09-25 18:14:51 +02:00
|
|
|
And then follow [the shell setup](#shell-plugin)
|
|
|
|
|
2021-02-15 00:33:14 +01:00
|
|
|
### From source
|
2021-02-16 00:33:30 +01:00
|
|
|
|
2021-02-13 21:54:35 +01:00
|
|
|
```
|
2023-07-31 00:08:00 +02:00
|
|
|
git clone https://github.com/atuinsh/atuin.git
|
2024-04-22 16:46:51 +02:00
|
|
|
cd atuin/crates/atuin
|
2021-02-15 00:33:14 +01:00
|
|
|
cargo install --path .
|
2021-02-13 21:54:35 +01:00
|
|
|
```
|
2024-05-13 04:35:34 +02:00
|
|
|
|
2022-05-20 00:34:29 +02:00
|
|
|
And then follow [the shell setup](#shell-plugin)
|
2021-02-13 21:54:35 +01:00
|
|
|
|
2021-04-26 12:50:31 +02:00
|
|
|
## Shell plugin
|
|
|
|
|
|
|
|
Once the binary is installed, the shell plugin requires installing. If you use
|
2023-02-10 10:08:42 +01:00
|
|
|
the install script, this should all be done for you! After installing, remember to restart your shell.
|
2021-04-26 12:50:31 +02:00
|
|
|
|
|
|
|
### zsh
|
|
|
|
|
|
|
|
```
|
|
|
|
echo 'eval "$(atuin init zsh)"' >> ~/.zshrc
|
|
|
|
```
|
|
|
|
|
2022-11-02 21:57:37 +01:00
|
|
|
#### Zinit
|
2021-05-12 22:47:06 +02:00
|
|
|
|
2022-11-02 21:57:37 +01:00
|
|
|
```sh
|
2023-07-31 00:08:00 +02:00
|
|
|
zinit load atuinsh/atuin
|
2021-05-12 22:47:06 +02:00
|
|
|
```
|
|
|
|
|
2024-05-13 04:35:34 +02:00
|
|
|
#### Antigen
|
|
|
|
|
|
|
|
```sh
|
2023-07-31 00:08:00 +02:00
|
|
|
antigen bundle atuinsh/atuin@main
|
2022-11-02 21:57:37 +01:00
|
|
|
```
|
|
|
|
|
2021-04-26 12:50:31 +02:00
|
|
|
### bash
|
2021-02-13 21:54:35 +01:00
|
|
|
|
2024-02-08 15:16:19 +01:00
|
|
|
Atuin works in `bash >= 3.1` when combined with either ble.sh or bash-preexec. We recommend to use Atuin with the recent versions of `bash >= 5`.
|
2024-01-10 15:11:12 +01:00
|
|
|
|
2023-11-11 00:58:05 +01:00
|
|
|
#### [ble.sh](https://github.com/akinomyoga/ble.sh)
|
2021-02-13 21:54:35 +01:00
|
|
|
|
fix(bash): improve the support for `enter_accept` with `ble.sh` (#1465)
* feat(bash): check version of ble.sh
blehooks are only supported in ble.sh >= 0.4, so we require the ble.sh
version to be larger or equal to 0.4. We also describe the version
requirement in README.md.
* fix(bash): use ble.sh's contrib/integration/bash-preexec
ble.sh provides module "contrib/integration/bash-preexec", which can
be used with the same interface as bash-preexec. This module provides
"preexec_functions" and "precmd_functions" without requiring
bash-preexec.
This module also properly handles it when both ble.sh and bash-preexec
are loaded; the module resolves the conflicts between ble.sh and
bash-preexec, and the module also tries to support bash-preexec in the
detached state of ble.sh.
* fix(bash): use ble.sh's accept-line widget for enter_accept
In ble.sh, one can directly call the widget "accept-line" from a shell
script. The widget "accept-line" is the actual widget that reserves
the command execution in ble.sh, so calling "accept-line" is
equivalent to the normal execution. It includes all the necessary
adjustments and processing including stty and history.
In addition, the command will be executed at the top-level context
instead in a function scope. For example, without ble.sh, running
"declare -A dict=()" through enter_accept will create an associative
array in the function scope unexpectedly. With ble.sh, since the
command is executed at the top-level context, such a problem does not
happen.
When ble.sh is in a detached state, we fall back to the manual
execution of the command. In this case, we cannot assume the
existence of the shell function "__bp_set_ret_value", so we always use
__atuin_set_ret_value.
2023-12-28 21:08:45 +01:00
|
|
|
Atuin works best in bash when using [ble.sh](https://github.com/akinomyoga/ble.sh) >= 0.4.
|
2023-11-11 00:58:05 +01:00
|
|
|
|
fix(bash): improve the support for `enter_accept` with `ble.sh` (#1465)
* feat(bash): check version of ble.sh
blehooks are only supported in ble.sh >= 0.4, so we require the ble.sh
version to be larger or equal to 0.4. We also describe the version
requirement in README.md.
* fix(bash): use ble.sh's contrib/integration/bash-preexec
ble.sh provides module "contrib/integration/bash-preexec", which can
be used with the same interface as bash-preexec. This module provides
"preexec_functions" and "precmd_functions" without requiring
bash-preexec.
This module also properly handles it when both ble.sh and bash-preexec
are loaded; the module resolves the conflicts between ble.sh and
bash-preexec, and the module also tries to support bash-preexec in the
detached state of ble.sh.
* fix(bash): use ble.sh's accept-line widget for enter_accept
In ble.sh, one can directly call the widget "accept-line" from a shell
script. The widget "accept-line" is the actual widget that reserves
the command execution in ble.sh, so calling "accept-line" is
equivalent to the normal execution. It includes all the necessary
adjustments and processing including stty and history.
In addition, the command will be executed at the top-level context
instead in a function scope. For example, without ble.sh, running
"declare -A dict=()" through enter_accept will create an associative
array in the function scope unexpectedly. With ble.sh, since the
command is executed at the top-level context, such a problem does not
happen.
When ble.sh is in a detached state, we fall back to the manual
execution of the command. In this case, we cannot assume the
existence of the shell function "__bp_set_ret_value", so we always use
__atuin_set_ret_value.
2023-12-28 21:08:45 +01:00
|
|
|
With ble.sh (>= 0.4) installed, just add atuin to your .bashrc
|
2023-11-11 00:58:05 +01:00
|
|
|
|
|
|
|
```bash
|
|
|
|
echo 'eval "$(atuin init bash)"' >> ~/.bashrc
|
2021-02-13 22:21:00 +01:00
|
|
|
```
|
2023-11-11 00:58:05 +01:00
|
|
|
|
2024-04-09 13:41:31 +02:00
|
|
|
> [!IMPORTANT]
|
|
|
|
>
|
|
|
|
> Please make sure that the above line comes after sourcing ble.sh, so Atuin detects ble.sh.
|
fix(bash): improve the support for `enter_accept` with `ble.sh` (#1465)
* feat(bash): check version of ble.sh
blehooks are only supported in ble.sh >= 0.4, so we require the ble.sh
version to be larger or equal to 0.4. We also describe the version
requirement in README.md.
* fix(bash): use ble.sh's contrib/integration/bash-preexec
ble.sh provides module "contrib/integration/bash-preexec", which can
be used with the same interface as bash-preexec. This module provides
"preexec_functions" and "precmd_functions" without requiring
bash-preexec.
This module also properly handles it when both ble.sh and bash-preexec
are loaded; the module resolves the conflicts between ble.sh and
bash-preexec, and the module also tries to support bash-preexec in the
detached state of ble.sh.
* fix(bash): use ble.sh's accept-line widget for enter_accept
In ble.sh, one can directly call the widget "accept-line" from a shell
script. The widget "accept-line" is the actual widget that reserves
the command execution in ble.sh, so calling "accept-line" is
equivalent to the normal execution. It includes all the necessary
adjustments and processing including stty and history.
In addition, the command will be executed at the top-level context
instead in a function scope. For example, without ble.sh, running
"declare -A dict=()" through enter_accept will create an associative
array in the function scope unexpectedly. With ble.sh, since the
command is executed at the top-level context, such a problem does not
happen.
When ble.sh is in a detached state, we fall back to the manual
execution of the command. In this case, we cannot assume the
existence of the shell function "__bp_set_ret_value", so we always use
__atuin_set_ret_value.
2023-12-28 21:08:45 +01:00
|
|
|
|
2023-11-11 00:58:05 +01:00
|
|
|
#### [bash-preexec](https://github.com/rcaloras/bash-preexec)
|
|
|
|
|
2024-04-09 13:41:31 +02:00
|
|
|
[Bash-preexec](https://github.com/rcaloras/bash-preexec) can also be used, but
|
|
|
|
you may experience minor problems of missing commands, ignored `HISTCONTROL`,
|
|
|
|
wrong recorded duration and exit status of some commands.
|
2023-11-11 00:58:05 +01:00
|
|
|
|
|
|
|
To use bash-preexec, download and initialize it
|
|
|
|
|
|
|
|
```bash
|
2021-04-26 12:50:31 +02:00
|
|
|
curl https://raw.githubusercontent.com/rcaloras/bash-preexec/master/bash-preexec.sh -o ~/.bash-preexec.sh
|
|
|
|
echo '[[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh' >> ~/.bashrc
|
2021-02-13 22:21:00 +01:00
|
|
|
```
|
2021-02-13 21:54:35 +01:00
|
|
|
|
2024-02-08 15:16:19 +01:00
|
|
|
Then set up Atuin
|
2021-04-26 12:50:31 +02:00
|
|
|
|
2023-11-11 00:58:05 +01:00
|
|
|
```bash
|
2021-04-26 12:50:31 +02:00
|
|
|
echo 'eval "$(atuin init bash)"' >> ~/.bashrc
|
|
|
|
```
|
2021-03-10 22:24:08 +01:00
|
|
|
|
2024-04-09 13:41:31 +02:00
|
|
|
> [!NOTE]
|
|
|
|
>
|
|
|
|
> bash-preexec cannot properly invoke the `preexec` hook for subshell commands
|
|
|
|
> `(...)`, function definitions `func() { ...; }`, empty for-in-statements `for
|
|
|
|
> i in; do ...; done`, etc., so those commands may not be recorded in the
|
|
|
|
> Atuin's history.
|
|
|
|
>
|
|
|
|
> bash-preexec currently has an issue where it will stop honoring
|
|
|
|
> `HISTCONTROL=ignorespace`. While Atuin will ignore commands prefixed with
|
|
|
|
> whitespace, they may still end up in your bash history. Please check your
|
|
|
|
> configuration! All other shells do not have this issue.
|
|
|
|
>
|
|
|
|
> Also, there can be problems in the recorded duration and the exit status of
|
|
|
|
> some commands.
|
|
|
|
|
|
|
|
> [!IMPORTANT]
|
|
|
|
>
|
|
|
|
> To use Atuin in `bash < 4` with bash-preexec, the option `enter_accept` needs
|
|
|
|
> to be turned on (which is so by default).
|
2024-01-10 15:11:12 +01:00
|
|
|
|
2021-12-11 10:48:53 +01:00
|
|
|
### fish
|
|
|
|
|
|
|
|
Add
|
|
|
|
|
|
|
|
```
|
|
|
|
atuin init fish | source
|
|
|
|
```
|
|
|
|
|
|
|
|
to your `is-interactive` block in your `~/.config/fish/config.fish` file
|
2024-05-13 04:35:34 +02:00
|
|
|
|
2023-03-26 16:44:06 +02:00
|
|
|
### Nushell
|
|
|
|
|
|
|
|
Run in *Nushell*:
|
|
|
|
|
|
|
|
```
|
|
|
|
mkdir ~/.local/share/atuin/
|
2024-01-09 17:37:57 +01:00
|
|
|
atuin init nu | save -f ~/.local/share/atuin/init.nu
|
2023-03-26 16:44:06 +02:00
|
|
|
```
|
|
|
|
|
|
|
|
Add to `config.nu`:
|
|
|
|
|
|
|
|
```
|
|
|
|
source ~/.local/share/atuin/init.nu
|
|
|
|
```
|
2023-05-02 04:43:30 +02:00
|
|
|
|
2024-01-29 13:17:36 +01:00
|
|
|
### Xonsh
|
|
|
|
|
|
|
|
Add
|
|
|
|
```
|
|
|
|
execx($(atuin init xonsh))
|
|
|
|
```
|
|
|
|
to the end of your `~/.xonshrc`
|
|
|
|
|
2024-03-12 18:30:51 +01:00
|
|
|
# Security
|
|
|
|
|
2024-05-13 04:35:34 +02:00
|
|
|
If you find any security issues, we'd appreciate it if you could alert ellie@atuin.sh
|
2024-03-12 18:30:51 +01:00
|
|
|
|
2023-12-10 12:13:43 +01:00
|
|
|
# Contributors
|
|
|
|
|
|
|
|
<a href="https://github.com/atuinsh/atuin/graphs/contributors">
|
|
|
|
<img src="https://contrib.rocks/image?repo=atuinsh/atuin&max=300" />
|
|
|
|
</a>
|
|
|
|
|
|
|
|
Made with [contrib.rocks](https://contrib.rocks).
|
|
|
|
|
2023-05-02 04:43:30 +02:00
|
|
|
[English]: ./README.md
|
2023-05-06 16:35:24 +02:00
|
|
|
[简体中文]: ./docs/zh-CN/README.md
|