【问题标题】:How to concat multiple bash commands?如何连接多个bash命令?
【发布时间】:2021-04-15 03:37:20
【问题描述】:

拥有这个 bash_profile 命令,尝试在一个别名命令中运行后端和前端服务器,即ins

alias is='ivui && npm run start:backend'
alias ib='ivbe && npm run start:dev'
alias ins='ib && is'

指的是不同的项目文件夹并启动服务器,而 ib 也指的是不同的文件夹和服务器。尝试连接两者,但第一个仅触发并且不执行 && 的连接。

Concat npm 有助于从单个项目文件夹合并两个服务器,但想知道如何使用 bash_profile 完成此操作?所以通过只执行ins,它必须先启动后端服务器,然后再启动前端。

【问题讨论】:

  • 当前设置会发生什么? ins 不会被执行吗?
  • 如果你现在运行is,然后运行ib,一切都会开始吗?
  • 使用 ins,只执行 ib,它不会到达 is 命令。两者都依赖 nodemon
  • 是的,它将独立运行@codemonkey 而不是集体运行
  • 也许运行 ib 返回 none 0 退出状态?

标签: javascript node.js bash macos concatenation


【解决方案1】:

您的双别名命令 (ib && is) 不起作用的原因是,根据 man bash

别名允许字符串在用作单词时替换它 一个简单命令的第一个字。

有理由认为,如果您运行 ib && is,其中 ibis 都是别名,则它只会运行 ib

除此之外,还有一个不同的、我相信更好的解决方案来解决您的问题。您可以使用screen 在后台运行这两个命令,此外,您还可以随时查看它们的终端输出。

想法是这样的: 1. 启动一个screen 会话; 2. 在该会话中打开两个窗口; 3. 在第一个窗口运行npm run start:backend,在第二个窗口运行npm run start:dev

这是你需要的:

screen -S Servers -t backend_window -A -d -m
screen -S Servers -X screen -t dev_window

这将启动一个screen 会话,其中包含backend_windowdev_window。现在你只需要在这些窗口中运行你的 2 个命令:

screen -S Servers -p backend_window -X stuff $'npm run start:backend\n'
screen -S Servers -p dev_window -X stuff $'npm run start:dev\n'

现在你的两个 npm 命令同时在后台运行。您只需将这 4 行放入您的 .bashrc 文件中,它就会在登录时启动。

但这种方法的最佳之处在于,您可以通过附加屏幕并查看这些窗口内部来直观地看到这些 npm 命令发生了什么。运行:

screen -rx Servers

这将默认显示您的第一个窗口。让我们拆分屏幕并并排显示两个窗口:

Ctr-A + | <- will split the screen into 2 sections
Ctr-A + Tab <- will shit cursor to the new section
Ctr-A + " <- will show you your 2 windows, just pick the dev

所有这一切都会给你这个观点

请记住,即使在您注销后,您的两个 npm 命令仍将继续运行。要杀死它们,请按照上述方法附加屏幕,然后按 Ctrl-C 两个进程。或者直接运行killall screen,它们就会死掉。

【讨论】:

    【解决方案2】:

    您可以创建一个函数并在其中添加别名,例如,

    stopdev () (
      cd "$HOME/website" && {
        make website_stop
        ret=$?
        make backend_stop && return $ret
      }
    )
    

    这个例子也有返回码,并且有调用子shell来运行函数,所以函数调用后文件路径不是$HOME/website

    有关以下网页的更多信息, https://unix.stackexchange.com/questions/266063/why-cant-i-call-two-aliases-with

    【讨论】:

      猜你喜欢
      • 2010-12-09
      • 1970-01-01
      • 2016-01-05
      • 2014-02-14
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 2021-04-17
      • 1970-01-01
      相关资源
      最近更新 更多