我正在尝试使用echo -n
命令将一些内容写入到节点的包.json中没有新行的文件中,例如
start: "echo -n hello > my.file"
当我运行npm start
,而不是没有新行的hello
时,它在my.file
中创建-n hello
。然而,它在我的终端中运行正常(我在Mac上(。
根据您的上下文,您可以使用printf
而不是echo
,后者不会自动附加n
字符。
https://unix.stackexchange.com/questions/58310/difference-between-printf-and-echo-in-bash
这是由于NPM使用sh(1)
shell运行脚本,该shell不接受-n
选项。解决这个问题的一种方法是将NPM设置为使用Bash:
npm config set script-shell "/bin/bash"
echo
命令的文档某些shell可能提供与此实用程序类似或相同的内置echo命令。最值得注意的是,sh(1(中的内置echo不接受-n选项。请参阅内置(1(手册页。
NPM运行脚本的文档
脚本运行的实际shell依赖于平台。默认情况下,在类Unix系统上是/bin/sh命令,在Windows上是cmd.exe。/bin/sh引用的实际shell也取决于系统。截止日期npm@5.1.0您可以使用脚本shell配置自定义shell。
这里还有一个相关的StackOverflow答案:"echo-n";使用bash执行脚本时效果良好,但使用sh 时效果不佳