WebHU - Programozási kérdések és válaszok

Hogyan lehet a Bash echo-t feltételként használni egy Lua if utasításban?

Megpróbálok írni egy Lua függvényt a Neovimhoz, ami néhány Bash parancs segítségével ellenőrzi, hogy fut-e egy folyamat; ha fut, zárja be, és ha nem, futtasson egy új példányt.

Íme, amit eddig sikerült megírnom:

isrunning = vim.cmd([[!pgrep -u $UID -x livereload > /dev/null && echo "true" || echo "false"]])
print(isrunning)

if isrunning == "true" then
  print('Closing Livereload...')
  vim.cmd('!killall livereload')
else
  print('Opening Livereload...')
  vim.cmd('!cd build; livereload &; firefox http://localhost:35729/"%<.html"')
end

A probléma az, hogy még ha a livereload már fut, és a isrunning értéke "true", az if utasítás első fele soha nem fut le, csak az else után van. Mit kell változtatnom a javításhoz?


Frissítés: Íme a :luafile % kimenete, amikor a fenti kód a Neovim 0.5.0-ban fut:

:!pgrep -u $UID -x livereload > /dev/null && echo "true" || echo "false"
true

:!cd build; livereload &; firefox http://localhost:35729/"livereload.html"

opening...

Emiatt arra gondoltam, hogy a második sornak, a true, a print(isrunning) parancs kimenetének kell lennie. Miután megbeszéltük a megjegyzéseket, rájöttem, hogy ez nem így van.

Íme a kimenet, amikor a print parancsot print("Answer: " .. isrunning .. "Length: " .. isrunning:len())-re módosítom

:!pgrep -u $UID -x livereload > /dev/null && echo "true" || echo "false"
true

Answer: Length: 0
:!cd build; livereload &; firefox http://localhost:35729/"livereload.html"

opening...

Tehát a Neovim helyesen mutatja a !pgrep -u $UID -x livereload > /dev/null && echo "true" || echo "false" kimenetét, de úgy tűnik, hogy ez a kimenet nem tárolódik a isrunning változóban.

08.05.2021

Válaszok:


1

ha isrunning "true" lenne, akkor az if ágat írnád be, de ez nyilvánvalóan nem így van.

A echo újsort ad hozzá, így a isrunning nagyobb valószínűséggel lesz "true\n", ami természetesen nem egyenlő a "true"-tal.

Használja a echo -n gombot a záró új sor letiltásához, vagy ellenőrizze a helyes értéket, vagy használja a string.find vagy string.match jelet a == helyett

A bash kézikönyvből:

echo echo [-neE] [arg …] Szóközökkel elválasztva, újsorral lezárva adja ki az argokat. A visszatérési állapot 0, hacsak nem történik írási hiba. Ha -n van megadva, akkor a záró újsor le van tiltva...

08.05.2021
  • Kipróbáltam az összes javaslatát, de egyik sem működik. 10.05.2021
  • ez nem különösebben informatív megjegyzés. mi az isrunning értéke? print(isrunning, isrunning:len()) 10.05.2021
  • Elnézést a megjegyzésért, úgy értettem, hogy az if utasítás első része még mindig nem fut be. A kérdés megválaszolásához az érték "0" (0 előtt szóköz). 10.05.2021
  • nos, amikor legutóbb azt mondtad, hogy igaz, akkor mi változott? biztosan nem változott igazról 0-ra az -n opció miatt 10.05.2021
  • Frissítettem az eredeti kérdést. Ha további információra van szüksége, jelezze. 11.05.2021

  • 2

    Végül kitaláltam a megoldást, ami kettős:

    1. A io.popen és egy fájlleíró kombináció használata, ahogyan egy másik kérdésre ebben a válaszban szerepel. Ez lehetővé teszi a echo értékének kiolvasását a Lua-ból.
    2. A echo -n használata az újsor karakter elnyomására, ahogy azt Malac egy itt adott válaszában említette.

    Ezekkel a változtatásokkal íme a végső kód:

    handle = io.popen([[pgrep -u $UID -x livereload > /dev/null && echo -n "true" || echo -n "false"]])
    isrunning = handle:read("*a")
    handle:close()
    
    if isrunning == "true" then
      print('closing...')
      vim.cmd('!killall livereload')
    else
      print('opening...')
      vim.cmd('!cd build; livereload &; firefox http://localhost:35729/"%<.html"')
    end
    
    12.05.2021
    Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..