Linux shell script na windows

Re:Linux shell script na windows
« Odpověď #15 kdy: 12. 05. 2016, 10:48:38 »
Tak na prepisovani bashe do batu radsi rovnou zapomente, to je naprosta tragedie, ktera vas privede do blazince. MS batch soubory jsou totalni stredovek, i kdyz si nejsem jisty, jestli i tehdy uz nemeli lepsi. To se spis podivejte, kde sehnat bash pro Widle, pokud tedy nemate ty uzasne desitky, kde by uz mel nejak byt.

Nevíte co píšete, dělal jsem ve windows shellu (soubory s priponou .cmd, neplest se zastaralymi .bat soubory) veci o stovkách radku bez větších problemu.

Teď ale ještě záleží, zda jste totéž programoval v bashi. Moje zkušenost je ta, že bash má mnohem lepší možnosti, než cmd. U powershellu to může být zas opačně, ale ten neznám, takže nevím.

Jenze tenhle thread neni o tom jestli je lepsi bash nebo win shell, tazatel chtel poradit s prevodem bash scriptu do win console, cehoz zde nekteri zneuzili k off-topic protlacovani svych priorit v shell scriptingu a pomluvam win shellu i za cenu prokazatelnych nepravd. Ale to je u bLivnuxaku zrejme normalni, naflusat na MS za jakoukoliv cenu...

A o deset let stare objektove pipe (powershell) Linux jeste ani neslysel (pokud pomineme veci tretich stran jako Python)

Laeli, běž už konečně do (_!_).


Vlado

Re:Linux shell script na windows
« Odpověď #16 kdy: 12. 05. 2016, 11:41:44 »
Ahoj.

Toto je "otrocký" prepis prvého skriptu. Nielen že je takmer isté, že nebude fungovať, mohol by dokonca škodiť (Varovanie!). Ale môžeš ho použiť ako základ pre ladenie  :)

build-electrum-git.cmd:
Kód: [Vybrat]
@echo off

REM You probably need to update only this link
set ELECTRUM_GIT_URL=git://github.com/spesmilo/electrum.git
set BRANCH=master
set NAME_ROOT=electrum

REM These settings probably don't need any change

set PYHOME=c:\python27
PYTHON=%PYHOME%\python.exe -OO -B


REM Let's begin!
cd %~dp0
rem Toto nema ekvivalent (!!!): set -e

cd tmp

set T=electrum-git\__test__%RANDOM%
echo. %T%
if exist %T% goto :GIT_REPO_EXIST
    REM GIT repository not found, clone it
    echo Clone
    git clone -b %BRANCH% %ELECTRUM_GIT_URL% electrum-git
goto :GIT_REPO_DONE
:GIT_REPO_EXIST
del %T%
    REM GIT repository found, update it
    echo Pull
    cd electrum-git
    git checkout master
    git pull
    cd ..
:GIT_REPO_DONE

cd electrum-git
set VERSION=
for /F "usebackq tokens=*" %%Z in (`git describe --tags`) do set VERSION=%%Z
echo Last commit: %VERSION%

cd ..

del /F /S /Q C:\electrum
xcopy electrum-git C:\electrum /S /Q /H /R /Y
copy /b electrum-git/LICENCE .

# add python packages (built with make_packages)
xcopy ../../../packages C:\electrum\ /S /Q /H /R /Y

# add locale dir
xcopy ../../../lib/locale C:\electrum\lib\ /S /Q /H /R /Y

# Build Qt resources
C:\Python27\Lib\site-packages\PyQt4\pyrcc4.exe C:\electrum\icons.qrc -o C:\electrum\lib\icons_rc.py
C:\Python27\Lib\site-packages\PyQt4\pyrcc4.exe C:\electrum\icons.qrc -o C:\electrum\gui\qt\icons_rc.py

cd ..

del /F /S /Q dist/

# build standalone version
$PYTHON C:\pyinstaller\pyinstaller.py --noconfirm --ascii -w deterministic.spec

# build NSIS installer
# $VERSION could be passed to the electrum.nsi script, but this would require some rewriting in the script iself.
C:\Program Files (x86)\NSIS\makensis.exe" /DPRODUCT_VERSION=%VERSION% electrum.nsi

cd dist
move electrum.exe %NAME_ROOT%-%VERSION%.exe
move electrum-setup.exe %NAME_ROOT%-%VERSION%-setup.exe
move electrum %NAME_ROOT%-%VERSION%
zip -r %NAME_ROOT%-%VERSION%.zip %NAME_ROOT%-%VERSION%
cd ..

# build portable version
copy /b portable.patch C:\electrum
pushd C:\electrum
patch < portable.patch
popd
$PYTHON C:\pyinstaller\pyinstaller.py --noconfirm --ascii -w deterministic.spec
cd dist
move electrum.exe %NAME_ROOT%-%VERSION%-portable.exe
cd ..

echo Done.


Druhý skript je python, nemyslím si, že by potreboval nejaké úpravy (nepoznám python).
Tretia vec je diff, tiež bez úprav.

Vlado

Re:Linux shell script na windows
« Odpověď #17 kdy: 12. 05. 2016, 11:44:14 »
Sakra, v druhej polovici som zabudol prepísať komentáre # na REM :-)

Unknown

Re:Linux shell script na windows
« Odpověď #18 kdy: 12. 05. 2016, 12:56:22 »
rem Toto nema ekvivalent (!!!): set -e

Pokud dobre chapu vyznam "-e" ze to pri jakekoliv chybe okamzite ukonci script, da se to nahradit nejak takhle:

command || exit /B

Pokud by tam byly nejake CALLy (jakoze je tam aktualne nevidim), je treba EXITy prislusne retezit.



JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Linux shell script na windows
« Odpověď #19 kdy: 12. 05. 2016, 17:38:29 »
Jenze tenhle thread neni o tom jestli je lepsi bash nebo win shell, tazatel chtel poradit s prevodem bash scriptu do win console, cehoz zde nekteri zneuzili k off-topic protlacovani svych priorit v shell scriptingu a pomluvam win shellu i za cenu prokazatelnych nepravd. Ale to je u bLivnuxaku zrejme normalni, naflusat na MS za jakoukoliv cenu...

Prosim te, nebud skromny a prispej svou trochou k osvete a napis, cim je ten batch v cmd tak dobry, ze jsem to nepochopil. Tazateli to jiste pomuze najit spravnou cestu, jak ty skripty prepsat. Co me se tyka, tak prepisovani do cmd by bylo o nervy a je lepsi se o to nepokouset a radsi se rovnou protrpet Powershellem.


j

Re:Linux shell script na windows
« Odpověď #20 kdy: 12. 05. 2016, 17:59:08 »
A co to tedy je kdyz to nejsou scripty? Dal bych chtel videt tu "spoustu nastroju" ktery pro Win nejsou...

Ze by bylo nejlepsi to napsat znova je ale asi pravda. Minimalne to bude rychlejsi...
On je bezne ve widlich trebas diff? Vazne?

...
Python i perl ... a da se to pak pustit proste jako parametr ty binarky ... jenze stejne bys to musel prepsat a stejne narazis na to, ze nektery veci proste nemas.

Nevíte co píšete, dělal jsem ve windows shellu (soubory s priponou .cmd, neplest se zastaralymi .bat soubory) veci o stovkách radku bez větších problemu.
Jestli tu nekdo absolutne netusi tak zjevne ty, cmd je alias pro bat.

Tedy jestli mi Guugl nezatajil nejake zasadni inovace, tak s tim, co mi predhodil, se muzete jit zahrabat. V tom se normalne psat neda, ledaze byste byl masochista a nevadilo vam, ze se kazdy den aspon jednou poserete.
Neboj, nezatajil ... je to porad stejna sracka. A PS je 10x horsi. Protoze tam sice hypoteticky muzes delat lecos, ale na na kazdym druhym kroku narazis na to, ze nemas nejakej modul, kterej neni defaultni soucasti widli ... takze to co udelat chces, udelat nejde. A samo, jako admin nemas pravo pustit script ... treba ze sitovyho disku. To ma prece logiku ne?


Unknown

Re:Linux shell script na windows
« Odpověď #21 kdy: 12. 05. 2016, 18:46:23 »
A co to tedy je kdyz to nejsou scripty? Dal bych chtel videt tu "spoustu nastroju" ktery pro Win nejsou...

Ze by bylo nejlepsi to napsat znova je ale asi pravda. Minimalne to bude rychlejsi...
On je bezne ve widlich trebas diff? Vazne?

...
Python i perl ... a da se to pak pustit proste jako parametr ty binarky ... jenze stejne bys to musel prepsat a stejne narazis na to, ze nektery veci proste nemas.

Nevíte co píšete, dělal jsem ve windows shellu (soubory s priponou .cmd, neplest se zastaralymi .bat soubory) veci o stovkách radku bez větších problemu.
Jestli tu nekdo absolutne netusi tak zjevne ty, cmd je alias pro bat.

Tedy jestli mi Guugl nezatajil nejake zasadni inovace, tak s tim, co mi predhodil, se muzete jit zahrabat. V tom se normalne psat neda, ledaze byste byl masochista a nevadilo vam, ze se kazdy den aspon jednou poserete.
Neboj, nezatajil ... je to porad stejna sracka. A PS je 10x horsi. Protoze tam sice hypoteticky muzes delat lecos, ale na na kazdym druhym kroku narazis na to, ze nemas nejakej modul, kterej neni defaultni soucasti widli ... takze to co udelat chces, udelat nejde. A samo, jako admin nemas pravo pustit script ... treba ze sitovyho disku. To ma prece logiku ne?

zkuste prikaz FC, pokud Vam nedostacuje tak http://gnuwin32.sourceforge.net/packages/diffutils.htm

CMD neni alias pro BAT, pripona cmd oznacuje scripty pro 32bitovy interpret cmd.exe, pripona bat oznacuje soubory pro 16bitovy command.com (v 64bitovych win uz neni obsazen). 32bitova konzole ma ruzne urovne rozsireni, ktere zjistite vypsanim promenne %cmdextversion% a ktere nejsou zpetne kompatibilni.

Ze nelze pustit script ze sitoveho disku jste vzal kde?


C:\>echo echo ahoj > Z:\test.cmd

C:\>z:\test.cmd

C:\>echo ahoj
ahoj

Nejake dalsi bLivnuxacke lzi by nebyly?

mikrom

Re:Linux shell script na windows
« Odpověď #22 kdy: 12. 05. 2016, 20:49:16 »
Jednoduchsie je nainstalovat si MSYS a skripty zmodifikovat.
MSYS obsahuje bash a daju sa  z neho priamo spustat aj windows *.exe.
Takze mas Bash pre Windows a ten skript by mal s malymi upravami bezat.

Na spojazdnenie tych skriptov bude zrejme treba stiahnut aj git for windows, ktory by mal obsahovat taky isty Bash ako MinGW/MSYS.

Co sa tyka porovnania, Windows cmd je neporovnatelne horsi ako Unix shell.
Kym som nepoznal MSYS, pouzival som dlhe roky na windows REXX, ktorym sa da dobre rozsirit slaby prikazovy jazyk windows.

PowerShell som skusal tiez - a viac krat, ale vzdy som mal z neho dost zly dojem.

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Linux shell script na windows
« Odpověď #23 kdy: 12. 05. 2016, 21:13:20 »
CMD neni alias pro BAT, pripona cmd oznacuje scripty pro 32bitovy interpret cmd.exe, pripona bat oznacuje soubory pro 16bitovy command.com (v 64bitovych win uz neni obsazen). 32bitova konzole ma ruzne urovne rozsireni, ktere zjistite vypsanim promenne %cmdextversion% a ktere nejsou zpetne kompatibilni.

To je uplne jedno. Dulezite je to, ze i kdyz to budu psat do souboru s priponou cmd, porad budu mit k dispozici naprosto desny skriptovaci jazyk, tu i tam pozaplatovany prikazy, ktere kdysi byly extra v Resource Kitu.

j

Re:Linux shell script na windows
« Odpověď #24 kdy: 13. 05. 2016, 09:36:46 »
...
Nejake dalsi bLivnuxacke lzi by nebyly?
Kreten jako ty kterej netusi co zvani nemuze samo pochopit, ze je rec o powershellu zejo ...
cmd JE bat, vzdycky byl.

Unknown

Re:Linux shell script na windows
« Odpověď #25 kdy: 13. 05. 2016, 11:15:43 »
...
Nejake dalsi bLivnuxacke lzi by nebyly?
Kreten jako ty kterej netusi co zvani nemuze samo pochopit, ze je rec o powershellu zejo ...
cmd JE bat, vzdycky byl.

Nemate pravdu. Pripona shell scriptu v systemu Windows rozhoduje ktery interpret bude pouzit pro jeho beh. Interpret cmd.exe je vyspelejsi nastupce programu command.com Ve verzich windows s jadrem NT je defaultni interpret scriptu obou typu program cmd.exe, command.com je pritomny pouze ve 32bitovych verzich OS s jadrem NT, ale jeho pouziti musite pripadne specifikovat (defaultne se nepouziva). V 64bitovych verzich OS uz neni vubec pritomen.


A script that is designed for cmd.exe can be named .cmd to prevent accidental execution on Windows 9x.
Here is a list of cmd.exe features that are not supported by command.com:

Long filenames (exceeding the 8.3 format)
Command history
Tab completion
Escape character: ^ (Use for: \ & | > < ^)
Directory stack: PUSHD/POPD
Integer arithmetic: SET /A i+=1
Search/Replace/Substring: SET %varname:expression%
Command substitution: FOR /F (existed before, has been enhanced)
Functions: CALL :label

http://stackoverflow.com/questions/148968/windows-batch-files-bat-vs-cmd/149918#149918

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Linux shell script na windows
« Odpověď #26 kdy: 13. 05. 2016, 11:23:35 »
Here is a list of cmd.exe features that are not supported by command.com:

Long filenames (exceeding the 8.3 format)
Command history
Tab completion
Escape character: ^ (Use for: \ & | > < ^)
Directory stack: PUSHD/POPD
Integer arithmetic: SET /A i+=1
Search/Replace/Substring: SET %varname:expression%
Command substitution: FOR /F (existed before, has been enhanced)
Functions: CALL :label
[/quote]

Tak to jo, tohle z toho dela skvely skriptovaci jazyk. Uz se nemuzu dockat, az to nekdo naportuje na Linux.

nobody(ten pravej)

Re:Linux shell script na windows
« Odpověď #27 kdy: 13. 05. 2016, 12:30:29 »
Tak to jo, tohle z toho dela skvely skriptovaci jazyk. Uz se nemuzu dockat, az to nekdo naportuje na Linux.

wine cmd
a muzes slavit nebo mlatit hlavou do zdi :-D

mh

Re:Linux shell script na windows
« Odpověď #28 kdy: 22. 06. 2016, 21:51:42 »
Jedina odpoved, ktera opravdu tazateli pomuze, je ta od "Vlado", s tim, ze opravdu chybi komentare v DOS like stylu od radku:
# add python packages (built with make_packages)

Ahoj.

Toto je "otrocký" prepis prvého skriptu. Nielen že je takmer isté, že nebude fungovať, mohol by dokonca škodiť (Varovanie!). Ale môžeš ho použiť ako základ pre ladenie  :)

build-electrum-git.cmd:
Kód: [Vybrat]
@echo off

REM You probably need to update only this link
set ELECTRUM_GIT_URL=git://github.com/spesmilo/electrum.git
set BRANCH=master
set NAME_ROOT=electrum

REM These settings probably don't need any change

set PYHOME=c:\python27
PYTHON=%PYHOME%\python.exe -OO -B


REM Let's begin!
cd %~dp0
rem Toto nema ekvivalent (!!!): set -e

cd tmp

set T=electrum-git\__test__%RANDOM%
echo. %T%
if exist %T% goto :GIT_REPO_EXIST
    REM GIT repository not found, clone it
    echo Clone
    git clone -b %BRANCH% %ELECTRUM_GIT_URL% electrum-git
goto :GIT_REPO_DONE
:GIT_REPO_EXIST
del %T%
    REM GIT repository found, update it
    echo Pull
    cd electrum-git
    git checkout master
    git pull
    cd ..
:GIT_REPO_DONE

cd electrum-git
set VERSION=
for /F "usebackq tokens=*" %%Z in (`git describe --tags`) do set VERSION=%%Z
echo Last commit: %VERSION%

cd ..

del /F /S /Q C:\electrum
xcopy electrum-git C:\electrum /S /Q /H /R /Y
copy /b electrum-git/LICENCE .

# add python packages (built with make_packages)
xcopy ../../../packages C:\electrum\ /S /Q /H /R /Y

# add locale dir
xcopy ../../../lib/locale C:\electrum\lib\ /S /Q /H /R /Y

# Build Qt resources
C:\Python27\Lib\site-packages\PyQt4\pyrcc4.exe C:\electrum\icons.qrc -o C:\electrum\lib\icons_rc.py
C:\Python27\Lib\site-packages\PyQt4\pyrcc4.exe C:\electrum\icons.qrc -o C:\electrum\gui\qt\icons_rc.py

cd ..

del /F /S /Q dist/

# build standalone version
$PYTHON C:\pyinstaller\pyinstaller.py --noconfirm --ascii -w deterministic.spec

# build NSIS installer
# $VERSION could be passed to the electrum.nsi script, but this would require some rewriting in the script iself.
C:\Program Files (x86)\NSIS\makensis.exe" /DPRODUCT_VERSION=%VERSION% electrum.nsi

cd dist
move electrum.exe %NAME_ROOT%-%VERSION%.exe
move electrum-setup.exe %NAME_ROOT%-%VERSION%-setup.exe
move electrum %NAME_ROOT%-%VERSION%
zip -r %NAME_ROOT%-%VERSION%.zip %NAME_ROOT%-%VERSION%
cd ..

# build portable version
copy /b portable.patch C:\electrum
pushd C:\electrum
patch < portable.patch
popd
$PYTHON C:\pyinstaller\pyinstaller.py --noconfirm --ascii -w deterministic.spec
cd dist
move electrum.exe %NAME_ROOT%-%VERSION%-portable.exe
cd ..

echo Done.


Druhý skript je python, nemyslím si, že by potreboval nejaké úpravy (nepoznám python).
Tretia vec je diff, tiež bez úprav.

Pomohlo to? Nebo je potreba dalsi pomoci?
Neslo by to v bashi pres CygWin (jednou jsem jednoho kolegu slysel jinemu kolegovi rikat: "Az se Te nekdo zepta, co je nejlepsi program na Windows, tak odpovez, ze to je CygWin") :)

Petr

Re:Linux shell script na windows
« Odpověď #29 kdy: 23. 06. 2016, 01:17:50 »
...
cmd JE bat, vzdycky byl.

Spíše nikdy nebyl, ne? Princip cmd zkopírovali do MSW z OS/2, ale tam se v něm dalo programovat v REXXu, což samozřejmě MS od IBM nechtěl či nemohl zkopírovat (ač existuje interpret Regina).