Добрый день!
Есть следующая команда 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 \'
ТОЖЕ НЕ ПОУЧАЕТСЯ
>[оверквотинг удален]
> информации - это однострочник, который помещает в файл 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= - это просто рабочий пример, не играет роли
Огромное спасибо! Даже два варианта!
В первом варианте вся команда берется в двойные кавычки как аргумент для echo, но присутствующие обратные слеши внутри аргумента сами дополнительно экранируются обратным слешем.
Во втором случае аргумент разбивается на подстроки в одинарных кавычках, причем присутствующие одинарные кавычки оригинальной команды становятся подстрокой в новых двойных кавычках.
Блеск!!!
> 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 внутри команд sed по такому же принципу подставляю
$ sed -nr 's/(^XML.*")(.*)(".*)/\2'"${VAR}"'/;p'