我在Bamboo中编写了一个部署计划,它使用sh运行代理上的所有脚本,因为这些代理运行的ubuntu 14.04相当于破折号。
我想执行以下步骤:
rm -rf !(${bamboo.scripts_folder})
这应删除除变量中的文件/文件夹以外的所有文件/文件夹。
这在bash中工作得很好,但是当我在破折号中运行时它会给我:
dash: 2: Syntax error: "(" unexpected
我尝试在脚本开始时运行以下命令以强制它以bash的形式运行:
if [ "$(ps -p "$$" -o comm=)" != "bash" ]; then
bash "$0" "$@"
exit "$?"
fi
虽然这在过去似乎对我有用,但出于某些原因,在这种情况下,它似乎并不像我得到的那样:
line 8: syntax error near unexpected token `('
我尝试将我的脚本更新为:
#!/bin/bash
echo "Early $0"
if [ "$(ps -p "$$" -o comm=)" != "bash" ]; then
bash "$0" "$@"
exit "$?"
fi
echo "Later $0"
rm -rf !(${bamboo.scripts_folder})
我希望echo语句打印出当前正在运行的shell,但我得到了:
11-Apr-2017 13:51:25 Early /home/bamboo/bamboo-agent-home/temp/49020935-118947854-118064182-ScriptBuildTask-740980554529016045.sh
11-Apr-2017 13:51:25 Early /home/bamboo/bamboo-agent-home/temp/49020935-118947854-118064182-ScriptBuildTask-740980554529016045.sh
11-Apr-2017 13:51:25 Later /home/bamboo/bamboo-agent-home/temp/49020935-118947854-118064182-ScriptBuildTask-740980554529016045.sh
11-Apr-2017 13:51:25 /home/bamboo/bamboo-agent-home/temp/49020935-118947854-118064182-ScriptBuildTask-740980554529016045.sh: line 13: syntax error near unexpected token `('
11-Apr-2017 13:51:25 /home/bamboo/bamboo-agent-home/temp/49020935-118947854-118064182-ScriptBuildTask-740980554529016045.sh: line 13: `rm -rf !(font)'
这并没有让我继续下去。任何人都可以建议"对"使用破折号运行此方法?或者"对"使用bash而不是破折号来执行此操作的方法(请注意,Bamboo会将所有内容都启动为sh并且您无法更改)
答案 0 :(得分:1)
有办法吗?是。
你喜欢它吗?可能不是。set --; for d in */; do [ "$d" = "ignoreme/" ] && continue; set -- "$@" "$d"; done
rm -rf "$@"
那就是说,你的另一个剧本根本就没有使用破折号 - 至少,如果它是根据它的shebang调用的话。在这种情况下,只需要传递shopt -s extglob
来启用extglobs,这是默认情况下关闭的扩展名:
#!/bin/bash
# you almost certainly don't need this at all
[ -n "$BASH_VERSION" ] || [ -n "$ran_reexec" ] || ran_reexec=1 exec bash "$0" "$@"
shopt -s extglob
rm -rf !(ignoreme)
答案 1 :(得分:0)
我知道我能做到:
find . ! -name 'folder' -delete -maxdepth 1
有找不到的方法吗?