如何运行" rm -rf!(文件夹)"在短划线

时间:2017-04-11 13:59:05

标签: shell bamboo dash-shell

我在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并且您无法更改)

2 个答案:

答案 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

有找不到的方法吗?