作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
运行这个脚本,bash ./cleanup.bash
,
#!/bin/bash
## Going to directory-moving stuff
rm -rf !(composer.json|.git)
给出错误:
cleanup.bash: line 10: syntax error near unexpected token '('cleanup.bash: line 10: 'rm -rf !(composer.json|.git)'
但是如果我直接在terminal中运行,没有任何问题:
rm -rf !(composer.json|.git)
我尝试删除所有其他行,但仍然出现错误。
如何在 Bash 脚本中正确输入它?
我在 Ubuntu 上,这一切都是在本地完成的,而不是在远程。
最佳答案
我猜你的问题是由于从脚本运行时没有设置 shell 扩展 glob 选项。当您声称它在命令行中工作时,您已经以某种方式设置了允许 !()
glob 的 extglob
标志。
由于 Bash 脚本无论何时以 #!/bin/bash
启动,都会启动一个新的子 shell,因此在父 shell 中设置的扩展选项可能不会反射(reflect)在新的 shell 中。为使其生效,在shebang之后的脚本中设置:
#!/bin/bash
shopt -s extglob
## Going to directory-moving stuff
rm -rf !(composer.json|.git)
关于linux - Bash脚本选择文件时报错 "syntax error near unexpected token ' ('",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47304329/
我是一名优秀的程序员,十分优秀!