Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Обработка конвейера в BASH скрипте  (Прочитано 2225 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Malamut

  • Автор темы
  • Ubuntu Member
  • Администратор
  • Старожил
  • *
  • Сообщений: 3351
  • Я добрый, честно!
    • Просмотр профиля
    • Моя страница на Launchpad
Обработка конвейера в BASH скрипте
« : 10 Февраль 2014, 20:45:38 »
Интересует решение такой задачи: нужно написать некий скрипт, который бы понимал конвеерный ввод и мог бы его перенаправлять (в зависимости от опций) в другую команду.

Как это должно работать:

tar -cJf - test | my-script.sh --someopt

В скрипте нужно написать нечто, чтобы работало так, как будто было вызвано

tar -cJf - test | cat > somewhere

Т.е. скрипт служит неким посредником, и нужен только для обработки опций и перенаправления в другую команду. Цель применения - использовать в качестве ForceCommand для ssh. Там никаким боком не обойтись другими способами.
"Носителем суверенитета и единственным источником власти в Российской Федерации является ее многонациональный народ" Конституция РФ

Оффлайн Malamut

  • Автор темы
  • Ubuntu Member
  • Администратор
  • Старожил
  • *
  • Сообщений: 3351
  • Я добрый, честно!
    • Просмотр профиля
    • Моя страница на Launchpad
Re: Обработка конвейера в BASH скрипте
« Ответ #1 : 10 Февраль 2014, 20:55:23 »
UPDATE: Скрипт должен быть примерно такой:

#!/bin/bash

COMMAND="cat > ggg"

$COMMAND

Т.е. команда задаётся через переменную. Если скрипт такой:

#!/bin/bash

cat > ggg

то всё работает, а для приведённого выше варианта с переменной выдаёт

cat: >: Нет такого файла или каталога
"Носителем суверенитета и единственным источником власти в Российской Федерации является ее многонациональный народ" Конституция РФ

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6014
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Обработка конвейера в BASH скрипте
« Ответ #2 : 10 Февраль 2014, 22:35:57 »
Вообще фукцию объявляют через имя_функции() { COMMANDS; } ?#!/bin/bash
param="$1"
comanda()
{
cat "$param" > ggg ;
}


comanda
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Malamut

  • Автор темы
  • Ubuntu Member
  • Администратор
  • Старожил
  • *
  • Сообщений: 3351
  • Я добрый, честно!
    • Просмотр профиля
    • Моя страница на Launchpad
Re: Обработка конвейера в BASH скрипте
« Ответ #3 : 10 Февраль 2014, 22:59:25 »
Не, нужна не функция. Вообще я понял, в чём проблема. Я пытался вызвать команду, сохранённую в переменную, а в команде было перенаправление вывода (>). Так bash не умеет, редиска. Нужно использовать eval. Вот так работает:

#!/bin/bash

COMMAND="cat > ggg"

eval $COMMAND

echo 'aaaa' | ./test.sh
"Носителем суверенитета и единственным источником власти в Российской Федерации является ее многонациональный народ" Конституция РФ

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6014
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Обработка конвейера в BASH скрипте
« Ответ #4 : 11 Февраль 2014, 00:41:35 »
А зачем вообще таким путем? Перенаправление в скриптах вообще exec хорошо делаетexec > gggи стандартный вывод "повалился" в файл.
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Malamut

  • Автор темы
  • Ubuntu Member
  • Администратор
  • Старожил
  • *
  • Сообщений: 3351
  • Я добрый, честно!
    • Просмотр профиля
    • Моя страница на Launchpad
Re: Обработка конвейера в BASH скрипте
« Ответ #5 : 11 Февраль 2014, 16:06:17 »
Так команда-то в переменной находится уже, целиком и полностью. Её менять нельзя (точнее, крайне геморно), а надо просто запустить, чтобы она наследовала ввод родителя. Как выяснилось - наследует всегда, но вот перенаправление вывода работает только через eval.
"Носителем суверенитета и единственным источником власти в Российской Федерации является ее многонациональный народ" Конституция РФ

 

Страница сгенерирована за 0.087 секунд. Запросов: 24.