我写了一个很小的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 函数吗?
很难以安全而强大的方式做你想做的事。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
请注意,您不需要任何额外的引号或转义即可完成此操作。
另请参阅:
- 我正在尝试将命令放入变量中,但复杂情况总是失败!
- 我们如何运行存储在变量中的命令?
- 为什么在 Bash 中应该避免使用 eval,我应该使用什么来代替?