我正在编写一个用于执行某些命令的bash脚本,并且根据某个标志,该命令应该在本地或远程执行。此命令的输出应重定向到某个文件,此文件应位于执行命令的框中,即远程执行命令时远程执行该命令。
我正在尝试像
这样的事情#!/bin/bash
REMOTE=1
function f
{
CMD="$@"
if [ "${REMOTE}" == "1" ]
then
ssh some_host "$CMD"
else
$CMD
fi
}
# This executes "echo huhu" remotely and redirects the output into "out" on the remote box.
REMOTE=1 f echo huhu \> out
# This executes "echo haha > out" remotely (without redirection).
REMOTE=0 f echo haha \> out
当我没有转义>
符号时,f的任何输出当然都会重定向到本地方框上的"out"
。
我怎么能避免这种行为?
答案 0 :(得分:1)
写eval $CMD
代替$CMD
。扩展$CMD
时,重定向的解释已经发生,重定向操作将作为普通参数传递。
答案 1 :(得分:1)