Neexistuje způsob, jak zcela neprůstřelný systém. A dodal:"Jste si jistý?" nabádání k věcem je kontraproduktivní a vede k "Samozřejmě jsem si jistý." trhavé reakce.
Trik, který jsem pochytil z knihy v minulých letech, je nejprve udělat ls -R blah*
pak proveďte rm -fr blah*
pokud a jen tehdy, když se objevil výpis trefil to, co jsem chtěl.
Je dost snadné provést ls
nejprve příkaz, potom ↑ , odstraňte ls -R
a nahradit rm -fr
.
Poslední otázka zní:„Pokud pro vás byly informace cenné, kde je vaše záloha?“
A DEBUG
trap by mohl být napsán ke zrušení příkazů, které vypadají podezřele. Následující nebo jemu podobný kód lze přidat do vašeho ~/.bashrc
:
shopt -s extdebug
checkcommand() {
if [[ $BASH_COMMAND = 'rm -r'*' *' ]]; then
echo "Suppressing rm -r command ending in a wildcard" >&2
return 1
fi
# check for other commands here, if you like
return 0
}
trap checkcommand DEBUG
Upravte si logiku podle chuti.
(Ve skutečnosti neočekávám, že tento přístup bude užitečný – příliš mnoho způsobů, jak destruktivně pokazit příkazy, než je najít, aby testovaly jeden po druhém – ale poskytuje doslovnou odpověď na otázku).
Dokážete se naučit používat, řekněme, rmrf
místo rm -rf
?
Pokud ano, tato funkce bash vám poskytne možnost vidět, co by se skutečně stalo, než příkaz potvrdíte:
rmrf() { echo rm -rf "[email protected]"; read -p "Proceed (y/N)? "; [ "${REPLY,,}" = y ] && rm -rf "[email protected]"; }
Chcete-li, aby tato funkce byla trvalá, přidejte tento řádek do ~/.bashrc
soubor na každém počítači, který používáte.
Porovnání s běžným rm
alias
Je běžné definovat alias:
alias rm='rm -i'
To má dvě omezení:
-
Pokud na tomto aliasu začnete záviset, budete v šoku, když budete na stroji nebo v prostředí, které ho nemá. Naproti tomu pokus o spuštění
rmrf
na počítači bez této funkce vrátí neškodnécommand not found
. -
Tento alias ve vašem případě nepomůže, protože
-f
možnost, kterou zadáte na příkazovém řádku, přepíše parametr-i
možnost v aliasu.