Проблема с раскрытием тильды
При экспериментах с инструментом nono для изоляции агентов обнаружилось интересное предупреждение: PATH entries the sandbox can write to: ~/.local/bin/. Это выглядело подозрительно.

Суть проблемы: добавление пути в ~/.bashrc или ~/.zshrc вроде этого:
export PATH="$PATH:~/.local/bin/"
не раскрывает тильду в домашнюю директорию (или $HOME). Согласно документации bash, раскрытие тильды происходит только в неэкранированных (незакавыченных) значениях:
If a word begins with an unquoted tilde character ('~'), all of the characters up to the first unquoted slash (…) are considered a tilde-prefix. (…)
Bash checks each variable assignment for unquoted tilde-prefixes immediately following a ':' or the first '=', and performs tilde expansion in these cases. (…)
В результате вместо добавления /home/<user>/.local/bin/ в PATH, туда попадает буквальное значение ./~/.local/bin/.
Правильный способ
Исправить это можно, заменив тильду на переменную окружения:
export PATH="$PATH:$HOME/.local/bin/"
Стоит отметить, что незакавыченный вариант export PATH=$PATH:~/.local/bin действительно работает в Bash и Zsh, потому что раскрытие тильды происходит и после =, и после каждого двоеточия. Однако полагаться на это опасно — например, пробел в переменной может сломать всё.
Наглядный пример проблемы
Вот как это выглядит на практике:
$ ls -la
total 0
drwxr-xr-x@ 2 dc staff 64 Oct 2 13:37 .
drwxr-x---+ 105 dc staff 3360 Oct 2 13:37 ..
$ mkdir -p ./~/.local/bin/
$ printf '#include <stdio.h>\nint main() { puts("hello"); }'>a.c; gcc a.c -o ./~/.local/bin/kek
$ PATH="~/.local/bin/" kek
hello
$ tree -f
.
├── ./~
│ └── ./~/.local
│ └── ./~/.local/bin
│ └── ./~/.local/bin/kek
└── ./a.c
4 directories, 2 files

Как видно, бинарник kek был найден и выполнен из ./~/.local/bin/ — домашняя директория при этом не использовалась вообще.
Как проверить свой PATH
Можно быстро проверить наличие этой проблемы командой:
$ echo "$PATH" | grep -- '~'
Или для вывода каждой записи на отдельной строке:
$ echo "$PATH" | tr ':' '\n' | grep '~'
~/.local/bin/
Если команда что-то выведет — пора отредактировать .bashrc, .zshrc или .profile и заменить ~ на $HOME.
Спасибо инструменту nono за предупреждение об этом — хотя оно, конечно, могло бы быть подробнее.