我正在编写一个脚本来复制一些文件,并尝试使用shopt -s dotglob
启用 cp 来复制点文件诸如此类.jshint
。
我可以shopt -s dotglob
直接在 Bash 提示符下运行,没有任何错误。但是,运行脚本会引发错误:
script.sh: 81: script.sh: shopt: not found
我在 bash shell 中运行此脚本,带有 shebang 标头#!/usr/bin/env bash
。错误行:
shopt -s dotglob
cp -r $TEMP/img/* $TARGET/img/
cp -r $TEMP/js/* $TARGET/js/
cp -r $TEMP/less/* $TARGET/less/
在谷歌上找不到任何有用的信息,知道这里的问题是什么吗?
答案1
根据评论形成答案:
许多人出于习惯使用sh
而不是 来运行脚本bash
。如果可移植性是一个问题,这是一个很好的做法,但许多人这样做是因为他们复制了他们见过的东西,却没有理解它。
除非你的脚本需要在非桌面 Linux 系统上运行(例如,在 Android 设备上运行 shell 脚本就完全不同),否则我建议在开头使用 Bash shebang 行:
#!/bin/bash
如果此行位于脚本的第一行,则它决定调用哪个解释器(例如 bash 或 sh、Python 等 shell)来执行它。如果您使用上面的行,您将获得与从命令行执行相同的行为(假设您使用默认 shell)。如果出于可移植性或偏好的原因,您使用不同的 shebang 行,请注意,您必须查阅您引用的 shell 的文档,即使您引用的 shell 是 Bash 的符号链接。
答案2
您需要退出 zsh 并激活 bash,如下所示:
exec bash
运行命令
source ~/.bashrc
之后你可以响应 zsh:
exec zsh
希望有帮助