Как запустить первую команду со списка, распечатанного командой 'история | grep что-то'

Можно просто передать шаблон для нахождения:

$ find . -type f  -name "[Rr]eading[Tt]est[Dd]ata*"

Для определенного шаблона в вопросе можно просто использовать случай нечувствительная находка:

$ find . -type f -iname readingtestdata
2
20.01.2014, 16:47
3 ответа

Видеть те числа слева от вывода? Можно использовать их для обращения к той команде с расширением истории оболочки; ![number] в большинстве оболочек.

Это работает оба в bash и zsh:

$ echo "hello"
hello
$ history | grep hello
 5057  echo "hello"
$ !5057
echo "hello"
hello
$
2
27.01.2020, 22:00

Не очень изящное решение, но работы.

i=5  # Execute 5th command from the beginning of history
`history | sed -n "${i}p" | sed 's/^.\{7\}//'`
2
27.01.2020, 22:00

следующая небольшая функция удара должна сделать то, что Вы хотите во многих случаях.

использование: nthhist 3 MAKE выполнит 3-ю команду, которая содержала MAKE.

примечание: это не будет работать, если команда нашла, что этим путем является только внутреннее ударом

nthhist() {
  local NTH
  NTH=$1
  shift
  history \
  | grep -v "nthhist" \
  | grep "$@" \
  | head -${NTH} | tail -1 \
  | while read id cmd
  do
    $cmd
  done
}
0
27.01.2020, 22:00

Теги

Похожие вопросы