**最初的问题:**安装nix包管理器,然后通过启动bash脚本安装其他程序(例如lua)。
**解决方案:**我编写了如下bash脚本 install.sh:
#!/bin/bash
install_nix() (
echo "installing nix..."
echo ""
curl --location https://releases.nixos.org/nix/nix-2.18.1/install | sh -s -- --daemon
echo ""
)
if ! command -v nix-env &> /dev/null; then
echo "nix is not installed"
install_nix
fi
nix-env --install --attr nixpkgs.lua
字符串
**问题:**脚本导致以下结果:
./install.sh: line 18: nix-env: command not found
型
因为nix包管理器需要在安装后重新启动shell
[ 1 ]第一章
Nix将无法在活动的shell会话中工作,直到您重新启动它们。
**所以我想要什么:***以某种方式重新启动脚本内的shell并从那里继续执行,这样我就不需要重新启动shell并再次手动启动脚本 *
我尝试解决的问题:
1exec bash
...
if ! command -v nix-env &> /dev/null; then
echo "nix is not installed"
install_nix
exec bash
fi
...
型
2exec $0 $@
...
if ! command -v nix-env &> /dev/null; then
echo "nix is not installed"
install_nix
exec @0 $@
fi
...
型
3exec bash“$0”“$@"
...
if ! command -v nix-env &> /dev/null; then
echo "nix is not installed"
install_nix
exec bash @0 $@
fi
...
型
4subshell
...
if ! command -v nix-env &> /dev/null; then
echo "nix is not installed"
( install_nix )
fi
...
型
5命令替换$()
...
if ! command -v nix-env &> /dev/null; then
echo "nix is not installed"
$(install_nix)
fi
...
型
6命令替换``
...
if ! command -v nix-env &> /dev/null; then
echo "nix is not installed"
`install_nix`
fi
...
型
7Just Bash
...
if ! command -v nix-env &> /dev/null; then
echo "nix is not installed"
bash install_nix
fi
...
型
8 bash + source
...
if ! command -v nix-env &> /dev/null; then
echo "nix is not installed"
new_shell = $(bash)
source install_nix
disown $new_shell
fi
...
型
这一切都发生在WSL Ubuntu 22.04.2 LTS
**所以问题是:*如何 * 以某种方式重新启动脚本内的shell并从那里继续执行,这样就不需要重新启动shell并再次手动启动脚本?
2条答案
按热度按时间kq4fsx7k1#
第一个月
fiei3ece2#
您可以重新启动脚本,而不是
bash
字符串
并在脚本中检测不同的条件(即
nix
已经安装)。