Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Obecná podpora => Téma založeno: lou 31 Října 2015, 21:10:48
-
Chtěl jsem si naintalovat Java SE development Kit a z Oracle jsem si stáhl soubor .sh
Pak jsem podle návodu zde chtěl soubor spustit z terminálu - před tím jsem mu nastavil spustitelný příznak, ale terminál hlásí, že soubor neexistuje - zkoušel jsem zadat jen název souboru i celou cestu k němu ale obojí mělo stejný výsledek
mám Ubuntu 14.04
-
pokud je uložen ve stejném adresáři jako jsi v terminálu pak
chmod +x ./nazev_souboru.sh
hlásí danou hlášku?
-
tím by se měl nastavit ten spustitelný příznak - ten jsem nastavil v Nautilu , ale chyba byla někde jinde - nějak blbě jsem zadával cestu k souboru - pak jsem ale objevil zkratku ~/umisteni_souboru/soubor.sh a bylo to.
Z toho plyne poučení pro začátečníka: v první řadě se pořádně naučit pracovat s terminálem ;)
-
Je pravděpodobné, že se pletu, ale lepší cesta k instalace Oracle Java je instalace přes repozitáře: http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html (http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html)
-
na cestu používej
"/cesta/k_souboru/soubor.sh" u ~ jsem se setkal že to nefungovalo pak je jedině možnost právě dát absolutní cestu do "" nebo $HOME
-
Jakub: už je nainstalováno, tak snad příště
Cuore: budu na to pamatovat
-
Jak muze ~ nefungovat?
-
Jednoduše, udělej si malé testík. Sám si se setkal s tím, že někdy má bash script problém s nestandardním názvem. Např. si vytvoř adresář moje fotky. Otevři terminál a otestuj:
cd ~/moje fotky
cd "~/moje fotky"
cd "$HOME/moje fotky"
-
Ale to neznamená, že nefunguje, to znamená, že příkazu cd předáváš špatnou cestu.
Asi nemá cenu zdůrazňovat, že obyčejná mezera odděluje parametry. A "cd" přijímá jen jeden parametr, v prvním řádku mu předáváš dva.
cd ~/moje fotky
cd "~/moje fotky"
a ještě bych doplnil "správnou" variantu prvního řádku s escapovanou mezerou:
cd ~/moje\ fotky
-
Samo sebou máš pravdu, takže závěr je buď escapovat mezeru, nebo výměnit ~ za $HOME
-
Ale to nepomuze, pokud jde o tu mezeru. $HOME a ~ je ve vysledku to same, oboji se expanduje na domovsky adresar uzivatele, ale ~ je bezpecnejsi.
Prave naopak s $HOME muzes mit problem, pokud v ceste k domovskemu adresari bude mezera a ty nepouzijes uvozovky. Priklad:
mkdir /tmp/temp\ user
sudo useradd -d /tmp/temp\ user temp_user
sudo chown temp_user:temp_user /tmp/temp\ user
sudo su - temp_user
mkdir /tmp/temp\ user/test
cd ~/test # OK
cd "$HOME/test" # OK
cd $HOME/test # -bash: cd: /tmp/temp: Adresář nebo soubor neexistuje
sudo userdel -r temp_user
-
Samo sebou, že je mi jasné, že musím použít pak
""
Navíc použití cd s kombinací nestandardní cesty je jen jedno z mála rozdílů. Každému vyhovuje něco jiného a podle mě je ~ více "poruchové"
Dobrá jak tedy vysvětlíš
cd /tmp
ls "~" ls: nelze přistoupit k ~: Adresář nebo soubor neexistuje
ls /~ ls: nelze přistoupit k /~: Adresář nebo soubor neexistuje
ls "$HOME"
ls /$HOME
jednoduše záleží na situaci použití
-
Vysvetleni je proste. Vlnovka (~) se neexpanduje, pokud je v uvozovkach. Pak je brana jako obycejny znak. Tudiz lze udelat toto:
mkdir ~/"~test"
stejne jako toto:
mkdir ~/\~test
a vzhledem k tomu, ze se vlnovka expanduje jen na zacatku cesty, tak by melo fungovat i
mkdir ~/~test
Oboji vytvori v $HOME adresar s nazvem "~test".
Konstrukce /~ je (omlouvam se za ten vyraz) blbost, nesmysl, pokud je pouzita vlnovka jako $HOME, musi ji cesta zacinat, jinak se neexpanduje. Tudiz aby to fungovalo, musel by v rootu (/) existovat adresar s nazvem "~".
/$HOME sice taky minimalne zvlastni, ale tam se expanduje promenna (pokud neuzavres do jednoduchych uvozovek '...'), takze z toho bude napr. //home/user, coz je v poradku, stejne jako /./home/user.
Abys me nepochopil spatne, ja nehanim pouziti $HOME, jen mi to prijde zbytecne dlouhe na napsani. Vlnovka je jeden znak a s pripadnym escapovanim v ceste pomuze v shellu vzdycky rad tabulator.
-
Abys me nepochopil spatne, ja nehanim pouziti $HOME, jen mi to prijde zbytecne dlouhe na napsani
v pohodě jen si vysvětlujeme pojmy :)