проблема с использованием двойного серьезного акцента (backtick) в bash - PullRequest
0 голосов
/ 06 октября 2011

Я пытаюсь выяснить, какие файлы мне нужно изменить; поэтому я использую последовательности команд grep. Я хочу выяснить, какие файлы содержат как foo, так и bar. Поэтому моя команда:
grep foo `grep bar * -l` | awk -F':' '{print $1}' | sort | uniq
Эта команда возвращает мне большой список, который выглядит следующим образом:
pageABC.txt
pageBCD.txt
pageDEF.txt

Я хочу, чтобы этот вывод был открыт в emacs. Так что я обычно делаю так:
emacs ` whatever_was_in_my_output `
Эта команда обычно открывает все файлы.
Если я попытаюсь
emacs `grep foo `grep bar * -l` | awk -F':' '{print $1}' | sort | uniq `
Emacs даже не запустится. Может быть, это из-за использования двойных могил. Есть идеи как это решить?

Большое спасибо,

D

Ответы [ 2 ]

5 голосов
/ 06 октября 2011

Вы забыли экранировать внутреннюю подстановку команд:

emacs `grep foo \`grep bar * -l\` | awk -F':' '{print $1}' | sort | uniq`

В подобных случаях я обычно предпочитаю альтернативный синтаксис подстановки команд, так как он легче вкладывается:

emacs $(grep foo $(grep bar * -l) | awk -F':' '{print $1}' | sort | uniq)
3 голосов
/ 06 октября 2011

Избегайте обратных кавычек в bash и используйте $(command) для запуска подкоманд. Они правильно гнездятся, в отличие от спинок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...