我有一个名为“inDir”的Bash函数,它抽象出“转到目录,做某事,然后回到起始目录”模式。它被定义为:
inDir() {
if [ $# -gt 1 ]; then
local dir="$1"
local cwd=`pwd`
shift
if [ -d "$dir" ]; then
cd "$dir" && "$@"
cd "$cwd"
fi
fi
}
我正在尝试创建一个函数,其语义无关紧要,但基本上会运行:
inDir /tmp { [ -e testFile ] && touch testFile }
我希望“隐含的”语义清楚。我想进入一个目录,检查$ somefile是否存在,如果存在,则删除它。这不符合预期。如果我跑:
cd
inDir /tmp [ -e testFile ] && touch testFile
它检查/ tmp中是否存在testFile,然后尝试在〜中触摸它。任何人都可以想出一个调用inDir的好方法,以便接受“复合”命令吗?
答案 0 :(得分:3)
indir() {
if [ -d "$1" ]; then
local dir="$1"
shift
(cd "$dir" && eval "$@")
fi
}
indir /tmp touch testFile
indir /tmp "[ -e testFile ] && rm testFile"
答案 1 :(得分:2)
不。只需告诉它调用子shell。
inDir /tmp bash -c "[ -e testFile ] && touch testFile"