【问题标题】:How to change shell of npm install如何更改 npm install 的外壳
【发布时间】:2017-08-11 08:17:13
【问题描述】:

我正在尝试在 Ubuntu 16.04 中安装一个软件包。我收到以下错误消息:

npm install 

...

> padlock@2.0.0-beta.1 bower-install /home/kent/Documents/padlock
> pushd app && bower install && popd app

sh: 1: pushd: not found

我的研究

根据/bin/sh: pushd: not found,我的问题显然是 npm install 试图用 sh 而不是 bash 执行 pushd。

但是,我的默认 shell 已经是 bash

$ env | grep SHELL
SHELL=/bin/bash
$ echo $SHELL
/bin/bash
$ echo $0
bash

我不确定我需要改变什么。在执行 pushd 应用程序之前,我也尝试添加 SHELL=/bin/bash,但我也没有运气。

【问题讨论】:

  • 尝试使用ls -al /bin/bash查看bash是否链接到其他shell。
  • ls -al /bin/bash -rwxr-xr-x ... /bin/bash

标签: node.js linux bash shell


【解决方案1】:

npm 脚本使用 sh 运行

通过将该行作为脚本参数传递给 sh 来运行脚本

https://docs.npmjs.com/misc/scripts#exiting

如果您想在脚本中使用 bash,请制作脚本

bash -c 'pushd app && bower install && popd'

更新:从 November 2017 开始,您现在可以在 .npmrc 中设置 script-shell 以使用自定义 shell

【讨论】:

  • 有趣...当时挂锁开发人员认为 pushd 是如何工作的?
  • sh 在某些系统上是 bash,但在基于 debian 的系统上是破折号
  • 有趣的解决方法,但不是问题的答案,“如何更改 npm install 的外壳?”
  • @MarkHu 答案是你不能不破坏你的操作系统。
【解决方案2】:

通过在我的项目目录中创建此文件,我能够解决类似的情况:

$ cat .npmrc

script-shell=/bin/bash

FWIW,我偶然发现的问题是依赖于有问题模块的 package.json 文件的 postinstall 部分中特定于 bash 的“花括号扩展”命令。该格式错误的命令适用于 MacOS,但不适用于 Linux。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 2017-10-20
    相关资源
    最近更新 更多