ubuntu 如何在bash脚本中重新启动shell并继续执行脚本?

vngu2lb8  于 2023-11-17  发布在  Shell
关注(0)|答案(2)|浏览(192)

**最初的问题:**安装nix包管理器,然后通过启动bash脚本安装其他程序(例如lua)。
**解决方案:**我编写了如下bash脚本 install.sh

  1. #!/bin/bash
  2. install_nix() (
  3. echo "installing nix..."
  4. echo ""
  5. curl --location https://releases.nixos.org/nix/nix-2.18.1/install | sh -s -- --daemon
  6. echo ""
  7. )
  8. if ! command -v nix-env &> /dev/null; then
  9. echo "nix is not installed"
  10. install_nix
  11. fi
  12. nix-env --install --attr nixpkgs.lua

字符串

**问题:**脚本导致以下结果:

  1. ./install.sh: line 18: nix-env: command not found


因为nix包管理器需要在安装后重新启动shell

[ 1 ]第一章
Nix将无法在活动的shell会话中工作,直到您重新启动它们。

**所以我想要什么:***以某种方式重新启动脚本内的shell并从那里继续执行,这样我就不需要重新启动shell并再次手动启动脚本 *
我尝试解决的问题:

1exec bash

  1. ...
  2. if ! command -v nix-env &> /dev/null; then
  3. echo "nix is not installed"
  4. install_nix
  5. exec bash
  6. fi
  7. ...


2exec $0 $@

  1. ...
  2. if ! command -v nix-env &> /dev/null; then
  3. echo "nix is not installed"
  4. install_nix
  5. exec @0 $@
  6. fi
  7. ...


3exec bash“$0”“$@"

  1. ...
  2. if ! command -v nix-env &> /dev/null; then
  3. echo "nix is not installed"
  4. install_nix
  5. exec bash @0 $@
  6. fi
  7. ...


4subshell

  1. ...
  2. if ! command -v nix-env &> /dev/null; then
  3. echo "nix is not installed"
  4. ( install_nix )
  5. fi
  6. ...


5命令替换$()

  1. ...
  2. if ! command -v nix-env &> /dev/null; then
  3. echo "nix is not installed"
  4. $(install_nix)
  5. fi
  6. ...


6命令替换``

  1. ...
  2. if ! command -v nix-env &> /dev/null; then
  3. echo "nix is not installed"
  4. `install_nix`
  5. fi
  6. ...


7Just Bash

  1. ...
  2. if ! command -v nix-env &> /dev/null; then
  3. echo "nix is not installed"
  4. bash install_nix
  5. fi
  6. ...


8 bash + source

  1. ...
  2. if ! command -v nix-env &> /dev/null; then
  3. echo "nix is not installed"
  4. new_shell = $(bash)
  5. source install_nix
  6. disown $new_shell
  7. fi
  8. ...

这一切都发生在WSL Ubuntu 22.04.2 LTS
**所以问题是:*如何 * 以某种方式重新启动脚本内的shell并从那里继续执行,这样就不需要重新启动shell并再次手动启动脚本?

kq4fsx7k

kq4fsx7k1#

第一个月

fiei3ece

fiei3ece2#

您可以重新启动脚本,而不是bash

  1. exec "$0" "$@"

字符串
并在脚本中检测不同的条件(即nix已经安装)。

相关问题