Подстановка процесса ECHOS нежелательная «подсказка оболочки». Могу ли я отключить его?

Использование formail(, поставляемого сprocmail):

find ~/users/example -type f -exec sh -c '
  for email do
    formail -x to -x cc < "$email" |
      grep -qF my@example.com &&
      formail -cx subject < "$email"
  done' sh {} +

То есть для каждого файла электронной почты

  • извлечь заголовки Toи Cc
  • ищите my@example.comтам
  • , если он найден, извлеките заголовок Subjectи напечатайте его в одной строке (с-c).
0
13.06.2019, 04:08
1 ответ

Это происходит потому, что ваш сценарий возвращается перед подпроцессом из >(...)подстановки процесса, который выполняется асинхронно (, т.е. в фоновом режиме )и будет печатать свои данные только после того, как оболочка, которую вы вызвали, script из уже напечатанной подсказки.

Решение waitдля него; к сожалению, процессы, запущенные в подоболочках и т. д., не управляются как часть заданий и не отображаются в таблице заданий bash, поэтому вам придется обойтисьpgrep -P(find -by -parent):

func() {
    in=$(cat)
    sleep.2
    echo "'this is it: $in'"
}

echo "a string" > >(func)
wait $(pgrep -P $$)

(Я добавил sleep.2только для того, чтобы предотвратить ложное исчезновение симптома --дополнительного времени, которое требуется pgrepи waitдля запуска, может быть достаточно для завершения асинхронного процесса ).

Предположение о том, что процессы, запущенные внутри > >(...), являются дочерними элементами основного сценария, верно только тогда, когда они используются со встроенными модулями, функциями и групповыми командами, см. здесь для получения дополнительной информации.

1
28.01.2020, 02:40

Теги

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