URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9931
[ Назад ]

Исходное сообщение
"Экспорт в файл динноой команды bash"

Отправлено Олег Петрович , 30-Окт-14 10:17 
Добрый день!
Есть следующая команда bash
$ git log --all --author='Oleg'  --reverse --stat | sed -rn '\\"\d ;s/ //g ;s/(.*)\|.*/\1/p' | sort |uniq  > list_file

Как видно, в ней присутствуют все виды кавычек,обратные слеши и тп. Для информации - это однострочник, который помещает в файл list_file список всех изменяемых файлов в директории под git.
Теперь я хочу поместить этот однострочник в скрипт просто одной командой bash. Как это сделать не прибегая к history или copy-paste?

print 'git log --all --author='Igor Maravic'  --stat | sed -rn '\\"\d ;s/ //g ;s/(.*)\|.*/\1/p' | sort |uniq  > spisok'
НЕ РАБОТАЮТ из присутствия всех видов кавычек в команде.
echo \'git log --all --author='Igor Maravic'  --stat | sed -rn '\\"\d ;s/ //g ;s/(.*)\|.*/\1/p' | sort |uniq  > spisok \'
ТОЖЕ НЕ ПОУЧАЕТСЯ


Содержание

Сообщения в этом обсуждении
"Экспорт в файл динноой команды bash"
Отправлено Олег Петрович , 30-Окт-14 10:23 
>[оверквотинг удален]
> информации - это однострочник, который помещает в файл list_file список всех
> изменяемых файлов в директории под git.
> Теперь я хочу поместить этот однострочник в скрипт просто одной командой bash.
> Как это сделать не прибегая к history или copy-paste?
> print 'git log --all --author='Igor Maravic'  --stat | sed -rn '\\"\d
> ;s/ //g ;s/(.*)\|.*/\1/p' | sort |uniq  > spisok'
> НЕ РАБОТАЮТ из присутствия всех видов кавычек в команде.
> echo \'git log --all --author='Igor Maravic'  --stat | sed -rn '\\"\d
> ;s/ //g ;s/(.*)\|.*/\1/p' | sort |uniq  > spisok \'
> ТОЖЕ НЕ ПОУЧАЕТСЯ

Имелось ввиду, что не получается
printf 'git log --all --author='Igor Maravic'  --stat | sed -rn '\\"\d ;s/ //g ;s/(.*)\|.*/\1/p' | sort |uniq  > spisok'
echo 'git log --all --author='Igor Maravic'  --stat | sed -rn '\\"\d ;s/ //g ;s/(.*)\|.*/\1/p' | sort |uniq  > spisok'
--author= - это просто рабочий пример, не играет роли


"Экспорт в файл динноой команды bash"
Отправлено Олег Петрович , 30-Окт-14 13:25 
Огромное спасибо! Даже два варианта!
В первом варианте вся команда берется в двойные кавычки как аргумент для echo, но присутствующие обратные слеши внутри аргумента сами дополнительно экранируются обратным слешем.
Во втором случае  аргумент разбивается на подстроки в одинарных кавычках, причем присутствующие одинарные кавычки оригинальной команды становятся подстрокой в новых двойных кавычках.
Блеск!!!


"Экспорт в файл динноой команды bash"
Отправлено XAnder , 30-Окт-14 13:06 
> print 'git log --all --author='Igor Maravic'  --stat | sed -rn '\\"\d
> ;s/ //g ;s/(.*)\|.*/\1/p' | sort |uniq  > spisok'
> НЕ РАБОТАЮТ из присутствия всех видов кавычек в команде.
> echo \'git log --all --author='Igor Maravic'  --stat | sed -rn '\\"\d
> ;s/ //g ;s/(.*)\|.*/\1/p' | sort |uniq  > spisok \'
> ТОЖЕ НЕ ПОУЧАЕТСЯ

Как-то так:

echo "git log --all --author='Igor Maravic'  --stat | sed -rn '\\\\\"\\d ;s/ //g ;s/(.*)\\|.*/\\1/p' | sort |uniq  > spisok"

или так:

echo 'git log --all --author='"'"'Igor Maravic'"'"'  --stat | sed -rn '"'"'\\"\d ;s/ //g ;s/(.*)\|.*/\1/p'"'"' | sort |uniq  > spisok'


"Экспорт в файл динноой команды bash"
Отправлено Олег Петрович , 30-Окт-14 13:51 
Мдааа. Не додумался сам, хотя переменные bash внутри команд sed по такому же принципу подставляю
$ sed -nr 's/(^XML.*")(.*)(".*)/\2'"${VAR}"'/;p'