Перенаправление ввода-вывода команды, собранной в строку - PullRequest
2 голосов
/ 17 октября 2011

Я пишу сценарий 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 ]

1 голос
/ 17 октября 2011
1 голос
/ 17 октября 2011

Напишите eval $CMD вместо $CMD. Когда $CMD расширен, интерпретация перенаправления уже произошла, и операции перенаправления будут просто переданы как обычные аргументы.

...