Lo siguiente usa la prueba -o
de bash
para probar si la opción de shell pipefail
está configurada o no (esto funciona en [[... ]]
y con el comando test
integrado -, pero no con[... ]
). Si la opción no está configurada, la configura e instala una trampa que la desactivará cuando la función regrese:
foo () {
if [[ ! -o pipefail ]]; then
set -o pipefail
trap 'set +o pipefail' RETURN
fi
# rest of function body
}
Código con algo de depuración incluida:
foo () {
if [[ ! -o pipefail ]]; then
set -o pipefail
trap 'set +o pipefail' RETURN
fi
# rest of function body
if [[ -o pipefail ]]; then
echo 'pipefail is set (in function)'
else
echo 'pipefail is not set (in function)'
fi
}
if [[ -o pipefail ]]; then
echo 'pipefail is set'
else
echo 'pipefail is not set'
fi
foo
if [[ -o pipefail ]]; then
echo 'pipefail is set'
else
echo 'pipefail is not set'
fi
Ejecutarlo:
$ bash script.sh
pipefail is not set
pipefail is set (in function)
pipefail is not set
$ bash -o pipefail script.sh
pipefail is set
pipefail is set (in function)
pipefail is set
Вы можете удалить первую и последнюю строку с помощью
$ sed '1d;$d'
Итак, во входной файл просто включите текст, который вы показали. Если вам нужно найти часть между [start]
и [end]
, сделайте это так:
$ sed -n '/start/,/end/p' $File | sed '1d;$d'
Удовлетворяет ли это вашим требованиям?
sed -n '/^[start]/,/[end]/p'
Эквивалентом вышесказанного является:
sed '/^[start]/,/[end]/!d'