字符串组装命令的IO重定向

时间:2011-10-17 15:17:46

标签: bash shell ssh

我正在编写一个用于执行某些命令的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"

我怎么能避免这种行为?

2 个答案:

答案 0 :(得分:1)

eval $CMD代替$CMD。扩展$CMD时,重定向的解释已经发生,重定向操作将作为普通参数传递。

答案 1 :(得分:1)