复制不包括 x,y,z 的文件导致 shell 脚本中出现错误

复制不包括 x,y,z 的文件导致 shell 脚本中出现错误

我不太熟悉 shell 脚本,但我认为这是一个非常简单的修复,但它却让我困惑。

我需要复制目录的内容(不包括许多文件)。我有一个命令,当我将其输入终端时可以工作,但是当它在 shell 脚本中运行时,它会因语法错误而失败或根本不起作用。

有问题的命令是:

cp -r path/to/!(dir1|dir2|dir3) destination

任何帮助将不胜感激!

答案1

这就是ksh语法。仅当您通过以下方式启用其选项bash时才识别该语法:extglob

shopt -s extglob

因此,您需要将该行添加到脚本的开头,或者将其解释为ksh代替bash或调用您的脚本env BASHOPTS=extglob your-script(不建议使用后者,因为它会extglob为脚本生成的每个 bash shell 启用该选项)。

可能您在您的系统中启用了该选项~/.bashrc,这就是它在提示符下工作的原因(~/.bashrc仅由非登录交互式 shell 读取)。

相关内容