Как скопировать команду из истории? - PullRequest
0 голосов
/ 22 марта 2009

Я пытаюсь скопировать команду из истории. Как я могу скопировать 510-ю команду? Пожалуйста, смотрите данные ниже. Моя ставка:

history | grep 510 | sed '1q;d' | awk '{print $2-$10}' | pbcopy

но вывод 0. Я не могу понять причину. Что не так в команде?

  505  find . -perm=750 -print0 | xargs -0 chmod 750
  506  find . --perm=750 -print0 | xargs -0 chmod 750
  507  find . -perm=750 -print0 | xargs -0 chmod 750
  508  find . -perm=750 -print0 | xargs -0 chmod 750
  510  find . -perm 750 -print0 | xargs -0 chmod 750
  512  history | grep perm 750 -print0 | pbcopy

Ответы [ 4 ]

5 голосов
/ 22 марта 2009

Если вы используете bash:

echo "!510" | pbcopy

(См. Также «расширение истории» в руководстве по bash )

1 голос
/ 23 марта 2009

Для диапазона полей в Awk вам нужен цикл for. То, что вы делаете, это вычитание, то есть результат нуля.

Обычно команда cut выполняет задачу извлечения столбцов, но иногда Awk более подходит.

Вот что вы имели в виду.

history | grep 510 | sed 1q \
 | awk '{for(i = 2; i <= NF; i++){ORS = (i == NF ? "\n" : " "); print $i;}}' \
 | pbcopy
1 голос
/ 22 марта 2009

Вы можете использовать perl для печати всего, кроме первого столбца (510) запрошенной строки:

history | perl -ane 'print "@F[1..$#F]" if($F[0]==510)'
0 голосов
/ 22 марта 2009

Причина в том, что $2 и $10 не являются числами в сценариях awk. Индексы полей основаны на 1, поэтому, если вы хотите 750, первое - $5, второе - $11.

Обратите внимание, что это отличается от строк с "-perm=750"

...