Joe*_*Joe 6 unix bash pipe parameter-passing
我写了一个很小的 bash 函数,它只运行一个命令,如果$current_user_input = yes
function if_yes_run_with {
if [ $current_user_input = yes ]
then
$1
fi
}
Run Code Online (Sandbox Code Playgroud)
我多次称其为完美,例如:
if_yes_run_with 'brew update'
Run Code Online (Sandbox Code Playgroud)
但是,我已经达到了我想向其传递包含管道的命令的地步:
if_yes_run_with '\curl -L https://get.rvm.io | bash -s stable'
Run Code Online (Sandbox Code Playgroud)
该函数似乎只评估管道之前的命令。因此,运行它的结果给出与以下相同的结果:
if_yes_run_with \curl -L https://get.rvm.io
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助将“带管道的命令”作为参数传递给 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
Run Code Online (Sandbox Code Playgroud)
请注意,您不需要任何额外的引号或转义即可完成这项工作。
也可以看看: