Другие ответы хороши для ответа на вопрос вместо приведенных примеров. Мое приложение в реальном -мире более сложное и включает ряд сценариев и подпроцессов -. Вот упрощённый -пример сценария, который я хочу выполнить:
#!/bin/bash
sub-process-that-fails
# store and echo returncode for debug purposes
rc=$?
echo $rc
exit $rc
Пытаясь убедиться, что удаленная оболочка на самом деле была bash, а не dash (, как указал @JeffSchaller ), я попытался вызвать скрипт следующим образом:
~$ ssh -t -t host /bin/bash -x /srv/scripts/run.sh ; echo $?
Что привело к этому странному результату:
+ sub-process-that-fails
+ rc=5
+ echo 5
5
+ exit 5
0
После нескольких часов ковыряния я заметил trap 'kill 0' EXIT
набор в .bashrc
. Это делается для уничтожения всех подпроцессов -в случае, если bash будет уничтожен. трассировка bash, похоже, не отображает выполнение этой ловушки. Я переместил ловушку в скрипт-оболочку. Теперь я вижу, что на самом деле выполняется:
+ trap 'kill 0' EXIT
+ sub-process-that-fails
+ rc=5
5
+ echo 5
+ exit 5
+ kill 0
0
Удаленная оболочка завершает работу с кодом выхода последней команды. Это kill 0
и он завершается с 0.
Думаю, мой вопрос был слишком расплывчатым, я погуглил и обнаружил, что это можно сделать так:
grep -vf ignore.txt input.txt > output.txt
ignore.txt:
test/
tests/
_test.
/node_modules/
input.txt
был сгенерирован find
, каждая строка — это путь к файлу, он очень большой
output.txt
имеет тот же формат/содержимое, что и input.txt, с удаленными путями в шаблонах ignore.txt