Portál AbcLinuxu, 10. května 2025 00:50

Dotaz: Jak načíst proměnnou funkce obsahující \

19.10.2021 16:19 maraou
Jak načíst proměnnou funkce obsahující \
Přečteno: 527×
Odpovědět | Admin
Ahoj, Napsal jsem si BASH skriptík, který překládá adresy windows na linux

např: c 'F:\film\' provede cd /data/film

Problém je, že je otravné neustále psát uvozovky před a za cestu. Existuje nějaký způsob jak do proměnné načíst znak \ a ignorovat jeho escapovací funkci? Pak bych mohl udělat záměnu \ za \\ a už by vše fungovalo.

Díky, O.


Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

19.10.2021 17:06 X
Rozbalit Rozbalit vše Re: Jak načíst proměnnou funkce obsahující \
Odpovědět | | Sbalit | Link | Blokovat | Admin
Staci promennou obalit do uvozovek:
#!/bin/bash 

echo "$1"
Kdyz zadam na vstupu '\r\n' nic se neinterpertuje..
19.10.2021 19:12 maraou
Rozbalit Rozbalit vše Re: Jak načíst proměnnou funkce obsahující \
Oh děkuji.
19.10.2021 20:13 maraou
Rozbalit Rozbalit vše Re: Jak načíst proměnnou funkce obsahující \
Akorat teda mi to nefunguje... co s tim muze byt?

zkouskamikrofonu( )

{

echo "$1"

}

maraou@u5.lan> zkouskamikrofonu F:\tmp\test

F:tmptest

19.10.2021 20:41 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Jak načíst proměnnou funkce obsahující \
V otázke to bolo s úvodzovkami:
$ zkouskamikrofonu  'F:\film\' 
F:\film\
19.10.2021 21:32 maraou
Rozbalit Rozbalit vše Re: Jak načíst proměnnou funkce obsahující \
No právě, ‘s uvozovkami ‘ to samozřejmě funguje. Otázka je jak to udělat bez nich. Máme heterogení prostředí ve firmě, psát to každý den 50x prosťe nebaví.
xkucf03 avatar 19.10.2021 21:36 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Jak načíst proměnnou funkce obsahující \

A co takhle nepoužívat retardované OS, které si jako oddělovač adresářů zvolily tradiční escapovací znak (zpětné lomítko)? Nebo si do nich aspoň nainstalovat normální Shell (Bash atd.) a psát cesty s normálním lomítkem (stejně tak to funguje i třeba v Javě – i na těch retardovaných OS).

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
19.10.2021 21:58 maraou
Rozbalit Rozbalit vše Re: Jak načíst proměnnou funkce obsahující \
No ve firmě je 250 zaměstnanců a jenom naše oddělení (30 lidí) používá Linux... není nic snazšího všem ostatním vysvětlit, že je chyba na jejich straně... nota bene když jejich základní nástroje existují jenom pro windows a je to industry standard pro automobilový průmysl.
19.10.2021 22:10 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Jak načíst proměnnou funkce obsahující \
Pokiaľ je firma fyzicky limitovaná SW ktorý funguje len pre jeden OS, tak nerozumiem akú rolu v tom hrá druhý OS. Ale ani ma to nezaujíma.

Tie Windowsové programy sa pod Linuxom možno spustia pomocou programu Wine, a tam sa dá namapovať ten prípojný bod /data ako disk F. Akurát nerozumiem akú rolu v tom hrá bash.
19.10.2021 22:22 maraou
Rozbalit Rozbalit vše Re: Jak načíst proměnnou funkce obsahující \
Unix/Linux je historicky industry standard pro výpočty. Je to jen jedno oddělení. Ostatní jedou na windows (konstrukce, design, testing). Cílem otázky bylo zjednodušit si práci... nejde, nejde nevadí. Hezký den.
xkucf03 avatar 19.10.2021 22:32 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Jak načíst proměnnou funkce obsahující \

Díval jsem se, jestli nejde tu interpretaci zpětného lomítka v Bashi vypnout, ale přijde mi, že nejde. Třeba by to v jiném shellu šlo, nevím. Případně si takovou volbu do Bashe dopsat – to by nebyl velký problém. Akorát jde o to, že tím ten shell zmrzačíš a přestanou v něm fungovat věci, na které jsou lidé zvyklí a které všude jinde fungují (\t, \n, \ , \\, \), \', \" atd.)

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
20.10.2021 14:36 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Jak načíst proměnnou funkce obsahující \
Pokiaľ si nevie jedno oddelenie o počte 30 ľudí zvyknúť že zdieľaný disk F: je pripojený v /data/, a Windows priečinok F:\film\ majú tým pádom dostupný v /data/film/, tak bude treba upraviť použitý interpreter príkazov aby neeskejpoval lomítka v cieľovom priečinku (ak je zo zadaného rozsahu), ale ho rovno zamenil podľa požiadavky. A nielen interpreter príkazov, ale aj grafického správcu súborov keďže to budú zadávať aj tam alebo rovno klikať na URI file://F:/film/návod-na-použitie.asf

Toto už ani alias nevyrieši, a problém sa rozrastie do gigantických rozmerov.

Iné by to bolo, keby sa jednalo o textový zoznam súborov na spracovanie, ten by sa dal prehnať cez stream editor, zmeniť absolútnu cestu a poprípade aj dohľadať či je súbor dostupný pod malými/veľkými alebo zmiešanými písmenami v názve. Ak táto posledná vec nie je prepnutá v Sambe (myslím že sa jedná o voľbu nocase alebo ignorecase v príkaze mount.cifs). v prípade URI smb: si už nespomeniem.
20.10.2021 07:52 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: Jak načíst proměnnou funkce obsahující \
Používať / ako oddeľovač sa dá aj na Windowsoch.
Řešení 1× (Вherzet)
19.10.2021 23:18 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: Jak načíst proměnnou funkce obsahující \
Nápis si vlastný shell alebo modifikuj existujúci. ;)
debian.plus@protonmail.com
xkucf03 avatar 19.10.2021 20:43 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Jak načíst proměnnou funkce obsahující \
Interpretaci toho \t udělá ještě původní shell, ze kterého tu funkci voláš. Musíš to dát do uvozovek nebo apostrofů tam nebo zdvojit \\ (escapovat).
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
21.10.2021 13:36 ttttttttttt
Rozbalit Rozbalit vše Re: Jak načíst proměnnou funkce obsahující \
Šlo by v tom skriptu udělat reverzní transformaci k tomu, co udělal shell? Převést tab zpět na '/t' atp.?

Narazím na to, že nedokážu poznat, jestli nebyl tabulátor součástí názvu souboru, ale tam si můžu říct, že to nedovolím. Má to i další problémy (kromě toho, že je to rovnák na ohýbák)? Nemyslím si, že to je dobrý nápad, přemýšlím jen, jestli by to bylo možné.
xxxs avatar 24.10.2021 09:10 xxxs | skóre: 25 | blog: vetvicky
Rozbalit Rozbalit vše Re: Jak načíst proměnnou funkce obsahující \
to mozno nepotrebujes, lebo tab v nazve suboru vo win ich uzivatelia bezne nevytvoria.
Jendа avatar 20.10.2021 06:05 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Jak načíst proměnnou funkce obsahující \
Hm, to asi nejde, pokud to nějaký shell neumí vypnout. Navrhoval bych:
  • Pokud to tam pastuješ ze schránky, udělal bych si wrapovací skript (xclip -out | nějaká_transformace | xclip -in, případně to rovnou pastnout -- což nevím jak se dělá, já to dělám pomocí sleep 0.2; xdotool click 2)
  • Zjistit, jak složité by bylo změnit/hooknout pastovací funkci tvého terminálu.
  • Patchnout bash, aby věci z promptu neescapoval.
Pavel 'TIGER' Růžička avatar 19.10.2021 23:35 Pavel 'TIGER' Růžička | skóre: 54
Rozbalit Rozbalit vše Re: Jak načíst proměnnou funkce obsahující \
Odpovědět | | Sbalit | Link | Blokovat | Admin
A co tou konverzí adres provádíš? Většinou je síť navržena tak, aby se člověk ke zdroji dostal syntaxí svého systému.
Řešení 1× (Вherzet)
20.10.2021 00:46 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: Jak načíst proměnnou funkce obsahující \
Odpovědět | | Sbalit | Link | Blokovat | Admin
Robiš v BASH vo Windowse?
debian.plus@protonmail.com
20.10.2021 19:00 X
Rozbalit Rozbalit vše Re: Jak načíst proměnnou funkce obsahující \
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak uz to mam. Read ma prepinac, ktery lomitko ignoruje, takze staci nacitat skriptem:
#!/bin/bash

echo -n "Adresar: "; read -r FOO
echo "$FOO"

xkucf03 avatar 20.10.2021 19:10 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Jak načíst proměnnou funkce obsahující \

To ale čte z terminálu / standardního vstupu, ne z parametru příkazu/funkce. Pokud jsem tazatele pochopil schválně, tak by to chtěl používat takhle:

mojeFunkce() { echo -n "Adresar: "; read -r FOO; echo "$FOO"; }
mojeFunkce aaa\bbb\ccc

ale to parametr ignoruje a čte to ze STDIN.

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
k3dAR avatar 21.10.2021 02:43 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: Jak načíst proměnnou funkce obsahující \
Odpovědět | | Sbalit | Link | Blokovat | Admin
problem neni s promenou, ale v zadani parametru scriptu v shellu kdyz ho nedas do uvozovek...
sice v dotazu pises nacist promenou, ale dale pak pises pousteni skriptu s parametrem cesty bez uvozovek...
takze neni uplne jasne co, jak a proc vlastne chces, jak/kde chces zadavat cestu/cesty a jak/kde se ma predat vystup prevedene cesty...
tak aspon k zamysleni, priklad jak prevest win cesty uvedene v souboru:
#!/bin/bash

preved(){
    # prevod lomitek
    lin_cesta="$(echo "$2" | sed 's#\\#/#g')"
    # prevod F:/film na /data/film, 
    lin_cesta="$(echo "${lin_cesta}" | sed 's#^f:/film#/data/film#I')"
    
    # zobrazeni a pridani do souboru "vstupni nazev".prevedene
    echo "${lin_cesta}" | tee -a "${1}.prevedene"
}

# smazani vystupniho souboru pri spusteni
rm "${1}.prevedene"

# nacitani radku z vstupniho souboru zadaneho jako parametr skriptu
while read -r line; do
    preved "${1}" "${line}"
done < "${1}"
porad nemam telo, ale uz mam hlavu... nobody

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.