Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.
Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).
Revolut nabídne neomezený mobilní tarif za 12,50 eur (312 Kč). Aktuálně startuje ve Velké Británii a Německu.
Společnost Amazon miliardáře Jeffa Bezose vypustila na oběžnou dráhu první várku družic svého projektu Kuiper, který má z vesmíru poskytovat vysokorychlostní internetové připojení po celém světě a snažit se konkurovat nyní dominantnímu Starlinku nejbohatšího muže planety Elona Muska.
Poslední aktualizací začal model GPT-4o uživatelům příliš podlézat. OpenAI jej tak vrátila k předchozí verzi.
Google Chrome 136 byl prohlášen za stabilní. Nejnovější stabilní verze 136.0.7103.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 8 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »Podíváme se blíže na skript uninstall.sh, který šíří Princeton Instruments ve svém Picam_SDK-v2.6.0.run.
#!/bin/sh # Default variables START_DIR=`dirname $0` START_DIR=`cd $START_DIR; pwd` echo "Start_DIR is" $START_DIR USR_LIB=/usr/lib64 USR_LOC_LIB=/usr/local/lib64 INSTALL_ROOT=$START_DIR PI_ROOT=`cd ..; pwd` PLEORA_ROOT=`cd $START_DIR/../../pleora; pwd` REMOVE_LINKS=yes INSTALL_DIR_OVERWRITE=yes # Initial screen clear echo -n "Remove Picam SDK installed in directory '$INSTALL_ROOT' (yes/no) ? " read ANSWER if [ ! "$ANSWER" = "yes" ]; then echo "Uninstall cancelled." exit; fi if [ ! -w $INSTALL_ROOT ]; then echo "You do not have write permissions to '$INSTALL_ROOT'." echo "Run installer as super user (root)." exit 1 fi echo "Removing software on $INSTALL_ROOT" if [ -d $PI_ROOT ]; then rm -rf $PI_ROOT fi #pleora removal if [ -d $PLEORA_ROOT ]; then rm -rf $PLEORA_ROOT fi if [ "$REMOVE_LINKS" = "yes" ]; then rm -rf $USR_LOC_LIB/libPv* rm -rf $USR_LOC_LIB/libEb* rm -rf $USR_LOC_LIB/libPt* rm -rf $USR_LOC_LIB/libEbuser* rm -rf $USR_LOC_LIB/liblog* rm -rf $USR_LOC_LIB/libapr* rm -rf $USR_LOC_LIB/libG* rm -rf $USR_LOC_LIB/liblog* rm -rf $USR_LOC_LIB/libM* # Picam references rm -rf /var/run/pits rm -rf $USR_LOC_LIB/libpi* rm -rf $USR_LOC_LIB/*.dat rm -rf /etc/ld.so.conf.d/picam.conf fi echo "Removal complete." echo "" echo ""
Skript se zachová třemi různými způsoby, dle toho odkud je zavolán. Před příkazy rm -rf
dáme echo
, abychom zjistili co se stane, ale bez následků.
Smaže co má:
# /opt/PrincetonInstruments/picam/ # ./uninstall.sh Remove Picam SDK installed in directory '/opt/PrincetonInstruments/picam' (yes/no) ? yes Removing software on /opt/PrincetonInstruments/picam rm -rf /opt/PrincetonInstruments rm -rf /opt/pleora
Zachrání nás inteligentní chování příkazu rm, jinak by nám smazal celý /:
rm: it is dangerous to operate recursively on `/' rm: use --no-preserve-root to override this failsafe
# cd /root # /opt/PrincetonInstruments/picam/uninstall.sh Remove Picam SDK installed in directory '/opt/PrincetonInstruments/picam' (yes/no) ? yes Removing software on /opt/PrincetonInstruments/picam rm -rf / rm -rf /opt/pleora
Smaže nám celý /home:
# cd /home/user # /opt/PrincetonInstruments/picam/uninstall.sh Remove Picam SDK installed in directory '/opt/PrincetonInstruments/picam' (yes/no) ? yes Removing software on /opt/PrincetonInstruments/picam rm -rf /home rm -rf /opt/pleora
Chyba je na následujících řádcích:
START_DIR=`cd $START_DIR; pwd` PI_ROOT=`cd ..; pwd`
Autor si neuvědomil, že spouští příkaz cd
v subshellu, takže pracovní adresář v nadřízeném shellu zůstane stejný.
Pokud by se skript alespoň před spuštěním rm -rf
zeptal, zda-li má smazat adresář XY, byla by větší šance, že si toho uživatel všimne.
V případě, že by se skript správně otestoval, tak by tato chyba neprobublala až k zákazníkovi.
Takže ponaučení na závěr. Nevěřte nikomu. Není od věci mrknou co je obsahem skriptu uninstall.sh, obzvláště pokud není příliš dlouhý. A do třetice. Zálohovat, zálohovat, zálohovat.
UPDATE: David ještě správně poukázal na řádek:
START_DIR=`dirname $0`
Skript by v případě zavolání, pomocí symbolického linku z jiného adresáře, také selhal.
Šlo by to vylepšit voláním:
START_DIR=$(readlink -f ${BASH_SOURCE[0]})
Tiskni
Sdílej:
readlink -f
by mohl pomoct
Pokud jsem něco neopomněl, tak by to mělo jít např. takto:
readlink -f ${BASH_SOURCE[0]}
readlink
by tě mohlo zajímat:
includepath="$( cd -P "$( dirname "$0" )" && pwd )"
Autor si neuvědomil, že spouští příkaz cd v subshellu, takže pracovní adresář v nadřízeném shellu zůstane stejný.Tak v tom problém teda opravdu není.
Autorovi nikdo z nás do hlavy samozřejmě nevidí, ale nevidíme tam ani Tobě, takže klidně svou myšlenku rozveď.
START_DIR=`dirname $0`Tohle prostě v $0 dostane cestu toho, jak byl program zavolanej...