我写了一个很小的bash函数,如果$current_user_input = yes
function if_yes_run_with {
if [ $current_user_input = yes ]
then
$1
fi
}
我多次称呼它为完美,例如:
if_yes_run_with 'brew update'
但是,我已经到达要向其中传递包含管道的命令的地步:
if_yes_run_with '\curl -L https://get.rvm.io | bash -s stable'
该函数似乎仅评估直到管道的命令。因此,运行它的结果与以下结果相同:
if_yes_run_with \curl -L https://get.rvm.io
任何人都可以帮助将“带有管道的命令”作为参数传递给bash函数吗?
答案 0 :(得分:3)
以安全可靠的方式完成您想要的事情很困难。 Greg's Bash Wiki说得最好:
变量保存数据。函数保存代码。不要将代码放在变量内!
我不会让它直接执行命令。而是让函数返回成功/失败。然后,您可以在呼叫端使用&&
或if
做任何您想做的事情。
is_user_input_enabled() {
[[ $current_user_input = yes ]]
}
is_user_input_enabled && brew update
is_user_input_enabled && curl -L https://get.rvm.io | bash -s stable
请注意,您不需要任何额外的引号或转义符即可完成这项工作。
另请参阅: