Это классический случай использования для awk
awk '$1 ~ /6314/' file
или, если вы хотите передать шаблон для сопоставления в качестве переменной
awk -v pat="6314" '$1 ~ pat' file
Аналогичный подход в perl
perl -ane 'print if $F[0] =~ /6314/' file
Если вы поместите код, который хотите выполнить, например, /opt/my_script.sh
, делать то, что вы хотите, очень легко:
tmux new-session -d -s "myTempSession" /opt/my_script.sh
Это запускает новый отдельный сеанс с именем «myTempSession», выполняющий ваш сценарий. Позже вы можете присоединиться к нему, чтобы проверить, что он делает, выполнив tmux attach-session -t myTempSession
.
Это , на мой взгляд, наиболее простое и элегантное решение. Я не знаю ни одного простого способа выполнения команд из stdin (читай «из heredocs») с помощью tmux. Взломав что-то, вы, возможно, даже сможете это сделать, но это все равно будет (и будет выглядеть) взломом.
Например, вот хак, который использует команду, которую я предложил выше, для имитации желаемого поведения (= выполнение кода в новом сеансе tmux из heredoc.Запись на жесткий диск сервера не производится, поскольку создается временный файл / dev / shm
, который является tmpfs):
(
cat >/dev/shm/my_script.sh &&
chmod +x /dev/shm/my_script.sh &&
tmux new-session -d '/dev/shm/my_script.sh; rm /dev/shm/my_script.sh'
) <<'EOF'
echo "hacky, but works"
EOF
Также см.https://serverfault.com/questions/339390/run-command-in-detached-tmux-sessionдля примеров использования команды отправить -клавиши на отдельной панели.
Смешивая приведенное выше решение, я нашел другой способ добиться того же (, предполагая bash):
#!/bin/bash
wantTmuxExecute() {
sleep 30m ;
rm -rf dir_name ;
...
}
# send to tmux
type wantTmuxExecute | tail -n +2 > /dev/shm/wantInTmux.sh
# execute tmux
tmux new-session -d 'source /dev/shm/wantInTmux.sh ; rm /dev/shm/wantInTmux.sh'
tmux send-keys 'wantTmuxExecute'