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
mount
ecut
para criar uma lista de pontos de montagem pré-existentes, para serem deixados em paz. - Use
sed
para criar uma lista degrep
padrões que correspondam aos comandosmount
ouumount
que usam qualquer um desses pontos de montagem. - Use
grep -v
para pesquisar o script atual em busca de linhas que não correspondam à lista anterior degrep
patterns. Deixando todo o código adequado para ser executado. - Use
sed
para 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.