2 posts in this topic
This thread will focus on the scripts that write/execute bash scripts, and return the data (whereas my other thread is more just a spit sink). Currently you are relegated to piping to a file from the bash script, hopefully there are other options coming.
This AutoIt script writes a bash script containing an fdupes command based off the Directory you want to search, and whether or not you want it to recurse. It writes the script in Temp, runs it, writes the stdout to a file in Temp, then parses that file and returns you an array.
* You need to sudo apt-get install fdupes for this to work, btw. fdupes is stupid fast at what it does and being able to leverage linux features, not hunt down a windows equivalent, is great fun.
#requireadmin #include <WinAPIFiles.au3> #include <Array.au3> _WinAPI_Wow64EnableWow64FsRedirection(FALSE) _ArrayDisplay(_fdupes("c:\Users\" & @UserName & "\Desktop" , 1)) Func _fdupes($DirToCheckForDupes , $Recurse = 0) $bashscript = "c:\Windows\Temp\PRODfdupes.txt" $bashoutput = "c:\Windows\Temp\PRODfdupes_STDOUT.txt" ;format Windows Dir name to linux Dir name - DUPESDIR $aDupesDir = stringsplit($DirToCheckForDupes , "\" , 2) $sDupesDir = "//mnt/" & stringleft($DirToCheckForDupes , 1) for $i = 1 to ubound($aDupesDir) - 1 $sDupesDir &= "/" & $aDupesDir[$i] Next ;format Windows Dir name to linux Dir name - ScriptDIR $aScriptDir = stringsplit($bashscript , "\" , 2) $sScriptDir = "//mnt/" & stringleft($bashscript , 1) for $i = 1 to ubound($aScriptDir) - 1 $sScriptDir &= "/" & $aScriptDir[$i] Next ;format Windows Dir name to linux Dir name - OUTDIR $aOutDir = stringsplit($bashoutput , "\" , 2) $sOutDir = "//mnt/" & stringleft($bashoutput , 1) for $i = 1 to ubound($aOutDir) - 1 $sOutDir &= "/" & $aOutDir[$i] Next FileDelete($bashscript) FileDelete($bashoutput) $ErrFileWrite = $Recurse = 0 ? FileWrite($bashscript , "fdupes " & $sDupesDir & " > " & $sOutDir) : FileWrite($bashscript , "fdupes -R " & $sDupesDir & " > " & $sOutDir) $iPID = runwait('cmd /c bash ' & $sScriptDir) $Finalarr = stringsplit(fileread($bashoutput) , chr("10") , 2) return $Finalarr EndFunc ;fdupes
This thread will house the scripts i (or anyone who contributes) create while playing with Bash on Windows.
First up, a simple mount command. I am still trying to get the stdout, but piping to files will suffice for now. I am running Win 10 Build 14342.rs1_release.160506-1708
**Do -- Until will be cleaned up (or completely scrapped) when i can find a reliable way to deal with output.
#include<array.au3> #include <WinAPIFiles.au3> _WinAPI_Wow64EnableWow64FsRedirection(False) $outfile = "test_mount_output.txt" $iPID = run("C:\Windows\System32\bash.exe | mount > " & $outfile , "" , @SW_HIDE) Do sleep(100) Until FileExists($outfile) sleep(100) processclose($iPID) _ArrayDisplay(stringsplit(stringtrimright(fileread($outfile) , 1) , @LF , 2))
Hi all !
I work on a tool for automating logon in a business software. This software is a Linux application, displayed in Windows with an EXPORT DISPLAY method, using a X-SERVER (Cygwin/Xterm).
The problem is when I use Send or ControlSend, special keys like @ or # (or some other keys needing an AltGr combination), the characters sent are the non-AltGr keys (# become 3, @ become 3 - I use a French keyboard).
I tried to send keys to the Linux-Firefox (instead of the business software), but I had the same result.
Does anyone has already try to make something like this, with the same issue ?
Thanks for help