Revisado para lidar com pontos de montagem pré-existentes. Supondo que o código esteja neste formato, em que as linhas que podem causar problemas tenham um comando por linha, que é mount ou umount :
mount a x
mount b y
setup_thing
mount c z
do_something
umount z
cleanup_thing
umount y
umount x
Este kludge pode funcionar ... copie este código para a segunda linha do script:
mount | cut -d' ' -f3 | sed 's/.*/^u\?mount [^[:space:]]\* &$/' |
grep -v -f - $0 | sed 2d | exec sh -s -- "$@"
Como isso (teoricamente) funciona:
- Use
mountecutpara criar uma lista de pontos de montagem pré-existentes, para serem deixados em paz. - Use
sedpara criar uma lista degreppadrões que correspondam aos comandosmountouumountque usam qualquer um desses pontos de montagem. - Use
grep -vpara pesquisar o script atual em busca de linhas que não correspondam à lista anterior degreppatterns. Deixando todo o código adequado para ser executado. - Use
sedpara remover a segunda linha, para evitar a recursão. - Use
exec sh -s -- "$@"para executar apenas esse código, junto com qualquer argumento de linha de comando. Nada além da linhaexecé executada.
Teste de antemão alterando exec para cat # e examinando a saída. Se estiver bom, coloque exec de volta.