我正在处理一个bash脚本,如果存在特定文件,我需要有条件地执行某些操作。这种情况多次发生,因此我抽象了以下函数:
function conditional-do {
if [ -f $1 ]
then
echo "Doing stuff"
$2
else
echo "File doesn't exist!"
end
}
现在,当我想执行此操作时,我会执行以下操作:
function exec-stuff {
echo "do some command"
echo "do another command"
}
conditional-do /path/to/file exec-stuff
问题是,我很困扰我正在定义两件事:执行一组命令的功能,然后调用我的第一个函数。
我想以干净的方式将这个命令块(通常是2个或更多)直接传递给“conditional-do”,但我不知道这是如何可行的(或者如果它是可能的话)......有没有人有任何想法?
注意,我需要它是一个可读的解决方案......否则我宁愿坚持我所拥有的。
答案 0 :(得分:4)
对于大多数C程序员来说,这应该是可读的:
function file_exists {
if ( [ -e $1 ] ) then
echo "Doing stuff"
else
echo "File $1 doesn't exist"
false
fi
}
file_exists filename && (
echo "Do your stuff..."
)
或单行
file_exists filename && echo "Do your stuff..."
现在,如果您真的希望从该函数运行代码,那么您可以这样做:
function file_exists {
if ( [ -e $1 ] ) then
echo "Doing stuff"
shift
$*
else
echo "File $1 doesn't exist"
false
fi
}
file_exists filename echo "Do your stuff..."
我不喜欢那个解决方案,因为你最终会最终逃脱命令字符串。
编辑:将“eval $ *”更改为$ *。实际上,不需要Eval。与bash脚本一样,它是在我喝过几杯啤酒时写的; - )
答案 1 :(得分:0)
一个(可能是黑客)解决方案是将单独的函数一起存储为单独的脚本。
答案 2 :(得分:0)
回答:
[ -f $filename ] && echo "it has worked!"
或者你可以把它包起来,如果你真的想:
function file-exists {
[ "$1" ] && [ -f $1 ]
}
file-exists $filename && echo "It has worked"