Portál AbcLinuxu, 10. května 2025 22:26

Dotaz: jak spojit vim a which

5.2.2013 08:27 hajoucha | skóre: 22
jak spojit vim a which
Přečteno: 445×
Odpovědět | Admin
Ahojda, rád bych jedním příkazem otevřel ve vim soubor, který mi najde příkaz which. Něco jako

which osel.sh |vim -

ovšem tohle neotevře příslušný soubor osel.sh, ale naopak nepojmenovaný soubor s řádkem "/home/mh/bin/osel.sh"

Víte někdo jak na to?

Ř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

Řešení 1× (hajoucha (tazatel))
5.2.2013 08:48 helb
Rozbalit Rozbalit vše Re: jjak spojit vim a which
Odpovědět | | Sbalit | Link | Blokovat | Admin
vim `which osel.sh` (ale kdyz to soubor nenajde, vytvori tri prazdne soubory osel.sh, not a found)…
5.2.2013 09:56 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: jjak spojit vim a which
Nevytvoří. Za prvé rozumný shell tu hlášku napíše na chybový výstup, ne na standardní, takže vim se spustí bez parametru. A za druhé, i kdyby to shell psal na standardní výstup, pokud spustíte vim se jménem neexistujícího souboru, vytvoří ho teprve v okamžiku, kdy se ho rozhodnete uložit; ukončíte-li vim bez uložení, soubor nevznikne.
5.2.2013 10:25 helb
Rozbalit Rozbalit vše Re: jjak spojit vim a which
Aha, tak koukam ze zsh asi neni rozumny shell (nebo to mam nejak divne nastavene). V bashi to funguje jak rikate (stderr) a s ukladanim mate samozrejme pravdu.
5.2.2013 13:45 cronin | skóre: 49
Rozbalit Rozbalit vše Re: jjak spojit vim a which
Rozdiel bude partne v implementácii príkazu which, ktorý je v shelloch často built-in. Rozdiel býva práve v prípade, že command nenájdu.
5.2.2013 15:40 helb
Rozbalit Rozbalit vše Re: jjak spojit vim a which
Jasne, jen me zarazilo, ze se ta implementace v zsh chova prave takhle blbe.
5.2.2013 14:37 Ash | skóre: 53
Rozbalit Rozbalit vše Re: jak spojit vim a which
Odpovědět | | Sbalit | Link | Blokovat | Admin
vim $(which osel.sh)
5.2.2013 14:56 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: jak spojit vim a which
To je ovšem zcela zásadní rozdíl. :-)
5.2.2013 15:08 Ash | skóre: 53
Rozbalit Rozbalit vše Re: jak spojit vim a which
Pro soubor který má v názvu ` to je zcela zásadní rozdíl, protože which ho nevyescapuje a příkaz tedy selže. Uznávám, že to je okrajový případ :D
David Watzke avatar 5.2.2013 15:16 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: jak spojit vim a which
Je dobré mít to ošetřené, přestože člověk, který v názvu souboru použije znak `, si zaslouží jen to nejhorší :-)
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Jendа avatar 5.2.2013 15:27 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: jak spojit vim a which
touch $'\n'

Btw.
> which brm\`brm
/home/jenda/bin/brm`brm
> vim $(which brm\`brm) #chodí
GNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu)
5.2.2013 15:20 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: jak spojit vim a which
S mou verzí bashe a implementací which to nefunguje ani s tou alternativní syntaxí.
5.2.2013 19:25 Ash | skóre: 53
Rozbalit Rozbalit vše Re: jak spojit vim a which
Tak to je asi bug, zatímco u `` je to feature. Proto jsem také tu novější variantu navrhl, syntaxe `` je v Bash historická záležitost.
5.2.2013 21:01 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: jak spojit vim a which
Proč by to měl být bug? Obrácené apostrofy uvnitř $(...) pořád fungují jako speciální znak, mimo jiné kvůli snazšímu vnořování.
6.2.2013 05:40 Ash | skóre: 53
Rozbalit Rozbalit vše Re: jak spojit vim a which
Uvnitř $() se vnořuje pomocí $(), proč bych tam mydlil apostrofy?
6.2.2013 07:45 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: jak spojit vim a which
Otázka by spíš měla znít proč bych nemohl, když to funguje.
6.2.2013 11:10 Ash | skóre: 53
Rozbalit Rozbalit vše Re: jak spojit vim a which
Můžeš, i v mé verzi Bash lze apostrofy vnořovat do závorek.

Otázka je, zda by v závorkách měl být text vrácený příkazem which dále interpretován, nebo by měl být použit tak jak je jako command. Podle manuálu i logicky se mi jeví správné, že by měl být použit jako command, aniž by před tím byl interpretován, což odpovídám mému Bashi, proto říkám, že Tvůj Bash je buggy.
Řešení 1× (hajoucha (tazatel))
Tarmaq avatar 5.2.2013 16:13 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: jak spojit vim a which
Odpovědět | | Sbalit | Link | Blokovat | Admin
krome vyse uvedenych reseni lze cestu k souboru pres pajpu do vimu pridat i pomoci prepinace -o tedy:
which osels.sh | vim -o
Toto je zvlaste vhodne, chceme-li pres pajpu dostat vice souboru a otevrit je v oknech pod sebou... (prepinac -O je naopak otevre v oknech vedle sebe)
Don't panic!
5.2.2013 19:30 Ash | skóre: 53
Rozbalit Rozbalit vše Re: jak spojit vim a which
Tohle přece nefunguje...! Nebo máte nějakou extra special verzi vim?

Možné řešení by bylo which osel.sh | vim - ale nevýhoda je, že se nezachová jméno souboru, pouze je načten jeho obsah ze stdin. Hodí se i vim -p pokud člověk používá taby, ale jak říkám, musí za tím následovat jméno/a souboru/ů.
6.2.2013 15:44 cronin | skóre: 49
Rozbalit Rozbalit vše Re: jak spojit vim a which
xargs :-)

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.