Подход 1: bash, zsh и несколько других оболочек читают файл, имя которого находится в переменной окружения ENV
после обычных файлов rc и перед выполнением интерактивных команд или сценария.Однако bash делает это только если вызывается как sh, а zsh делает это только если вызывается как sh или ksh, что довольно ограничивает.
temp_rc=$(mktemp)
cat <<'EOF' >"$temp_rc"
mycommand --option
rm -- "$0"
EOF
ENV=$temp_rc sh
Подход 2: заставьте оболочку читать другой файл rc, исходникиобычный файл RC и содержит вызов программы, которую вы хотите запустить.Например, для bash:
temp_rc=$(mktemp)
cat <<'EOF' >"$temp_rc"
mycommand --option
if [ -e ~/.bashrc ]; then . ~/.bashrc; fi
rm -- "$0"
EOF
bash --rcfile "$temp_rc"
Для zsh файл должен называться .zshrc
, вы можете указать только другой каталог.
temp_dir=$(mktemp -d)
cat <<'EOF' >"$temp_dir/.zshrc"
mycommand --option
if [ -e ~/.zshrc ]; then . ~/.zshrc; fi
rm -- $0; rmdir ${0:h}
EOF
ZDOTDIR=$temp_dir zsh