Общий совет: если Вы имеете два уровня вложения, избегаете использования одинарных кавычек во внутренней команде и используете одинарные кавычки вокруг внешней команды.
Дополнительная подсказка: не используйте обратные галочки - `…`
- для выполнения кода вместо этого используйте $(…)
вокруг этого. Долларовыми круглыми скобками является в значительной степени DWIM ('Делают то, что я имею в виду') когда дело доходит до вложенных кавычек; одинарные левые кавычки имеют тайные, зависимые от оболочки правила.
watch -n 3 'for x in $(my_command | grep keyword | cut -d" " -f1); do command2 "rusage[mem=7000]" "$x"; done'
При необходимости в одинарных кавычках в единственно заключенной в кавычки команде можно использовать '\''
. Думайте об этих четырех символах как о способе заключить одинарную кавычку в кавычки в одинарных кавычках, хотя с технической точки зрения это создается как конец единственно заключенная в кавычки строка, добавьте литеральную одинарную кавычку и запустите новую единственно заключенную в кавычки строку (все еще добавленный к текущему слову).
Для более сложных случаев, или кропотливо считают кавычки или определяют временные переменные.
cmd='for x in $(my_command | grep keyword | cut -d" " -f1); do command2 "rusage[mem=7000]" "$x"; done'
watch_cmd='watch -n 3 "$cmd"'
Этот ответ не характерен для zsh. Zsh не приносит ничего главного здесь. Можно сохранить немного заключения в кавычки, потому что нет никакой потребности в двойных кавычках вокруг замен команды, и иногда существуют способы использовать созданные-ins а не внешние команды, которые уменьшают потребности заключения в кавычки, но базовые проблемы совпадают с в других оболочках.
О, и между прочим, отметьте это watch
выполнит Вашу команду в sh
, не в zsh. Если Вы хотите выполнить команду в zsh, необходимо работать
watch -n 3 -x zsh -c "$cmd"
на Debian/Ubuntu, и
export cmd
watch -n 3 'exec zsh -c "$cmd"'
(еще больше заключения в кавычки!) в другом месте.
Вы уверены, что это была 'разность' того файла и предыдущего файла?
Я aske, потому что, если два разработчика работают над той же строкой (строками) того же файла, второго cvs commit
может заставить cvs оставлять две версии той же строки (строк) на месте, с дополнительными строками, которые имеют'>>>>>' или' <<<<<' в них.
Сделать cvs log thefileinquestion
и посмотрите то, на что похожа история фиксации. Можно видеть проблему там.
Кажется, что кто-то вызвал фиксацию, но были конфликты. Необходимо проверить, кто фиксировал эту версию, потому что это - сигнал необразованного использования CVS.
Если cvs status
или сбой cvs commit
указывает на неразрешенные конфликты, для которых необходимо перерыть конфликтующий файл >>>>>>
строки и выбирают который из двух конфликтующих частей (на до ++++
другой от этого до <<<<
) допустимый, редактирование, и объедините 'непротиворечивую' версию.
Можно также использовать xxdiff для неслияния этих конфликтов. Та программа также availble со многими дистрибутивами