我正在使用bash脚本,如果存在特定文件,则需要有条件地执行一些操作。这是多次发生,所以我抽象了以下函数:
function conditional-do {
if [ -f $1 ]
then
echo "Doing stuff"
$2
else
echo "File doesn't exist!"
end
}
Run Code Online (Sandbox Code Playgroud)
现在,当我要执行此操作时,我将执行以下操作:
function exec-stuff {
echo "do some command"
echo "do another command"
}
conditional-do /path/to/file exec-stuff
Run Code Online (Sandbox Code Playgroud)
问题是,我烦恼的是我要定义两件事:一组要执行的命令的功能,然后调用我的第一个功能。
我想以一种干净的方式直接将此命令块(通常是2个或更多)传递给“条件执行”,但是我不知道这是如何可行的(或者甚至是可能的)...有人吗?有任何想法吗?
请注意,我需要将其作为可读的解决方案...否则,我宁愿坚持使用现有的东西。
对于大多数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..."
)
Run Code Online (Sandbox Code Playgroud)
或单线
file_exists filename && echo "Do your stuff..."
Run Code Online (Sandbox Code Playgroud)
现在,如果您确实希望从该函数运行代码,则可以这样做:
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..."
Run Code Online (Sandbox Code Playgroud)
但我不喜欢这种解决方案,因为您最终将最终转义命令字符串。
编辑:更改“评估$ *”为$ *。实际上,不需要评估。与bash脚本一样,它是在我喝了几杯啤酒时才写的;-)