Jump to content

Bash On Windows


iamtheky
 Share

Recommended Posts

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))

 

Edited by iamtheky

,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-.
|(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/
(_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_)
| | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) (
| | | | |)| | \ / | | | | | |)| | `--. | |) \ | |
`-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_|
'-' '-' (__) (__) (_) (__)

Link to comment
Share on other sites

Diff two files:

#include<array.au3>
#include <WinAPIFiles.au3>
_WinAPI_Wow64EnableWow64FsRedirection(False)

$file = "test_mount_output.txt"
$file2 = "test_mount_output_2.txt"
$outfile = "differences.txt"


$iPID = run("C:\Windows\System32\bash.exe | diff " & $file & " " & $file2 & "> " & $outfile , "" , @SW_HIDE)

Do
   sleep(100)
Until FileExists($outfile)

sleep(100)

processclose($iPID)

$aChanges = stringregexp(fileread($outfile) , ".*\s.*\s---\s>.*?\)" , 3)

_ArrayDisplay($aChanges)

 

,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-.
|(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/
(_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_)
| | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) (
| | | | |)| | \ / | | | | | |)| | `--. | |) \ | |
`-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_|
'-' '-' (__) (__) (_) (__)

Link to comment
Share on other sites

Dump Ntuser.pol to a readable text file on your desktop.

*Still needs cleaning but functional

#include<file.au3>
#include <WinAPIFiles.au3>

_WinAPI_Wow64EnableWow64FsRedirection(False)

$file = "/mnt/c/users/" & @UserName & "/ntuser.pol"
$outfile = "NTuserPol_Copy.txt"

$iPID = run("C:\Windows\System32\bash.exe | cat " & $file & " > /mnt/c/users/" & @UserName & "/desktop/" & $outfile , "" , @SW_HIDE)

While 1
   sleep(100)
      If FileExists("C:\users\" & @UserName & "\desktop\" & $outfile) Then
         ProcessClose($iPID)
         Exit
      EndIf
Wend

 

,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-.
|(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/
(_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_)
| | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) (
| | | | |)| | \ / | | | | | |)| | `--. | |) \ | |
`-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_|
'-' '-' (__) (__) (_) (__)

Link to comment
Share on other sites

  • 1 month later...

This wraps fdupes function so that you end with duplicate file results in the cmd.exe console, though still have to copy/paste it out until someone smart fixes the piping issue.  I have not benchmarked anything, but fdupes is pretty quick.

#requireadmin
#include <WinAPIFiles.au3>
_WinAPI_Wow64EnableWow64FsRedirection(FALSE)

_fdupes("C:\Program Files (x86)\AutoIt3\" , 1)

Func _fdupes($DirToCheckForDupes , $Recurse = 0)
   FileDelete("c:\Windows\Temp\testbashfdupes.txt")
   $ErrFileWrite = $Recurse = 0 ? FileWrite("c:\Windows\Temp\testbashfdupes.txt" , "fdupes .") : FileWrite("c:\Windows\Temp\testbashfdupes.txt" , "fdupes -r .")
   run("cmd /k bash //mnt/c//Windows/Temp/testbashfdupes.txt" , $DirToCheckForDupes)
EndFunc

 

Edited by iamtheky

,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-.
|(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/
(_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_)
| | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) (
| | | | |)| | \ / | | | | | |)| | `--. | |) \ | |
`-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_|
'-' '-' (__) (__) (_) (__)

Link to comment
Share on other sites

Better method of capturing command line without affecting progress

#requireadmin
#include <WinAPIFiles.au3>
#include <Array.au3>
_WinAPI_Wow64EnableWow64FsRedirection(FALSE)
opt("wintitlematchmode" , 2)

_ArrayDisplay( _fdupes("C:\Program Files (x86)\AutoIt3\" , 1) )


Func _fdupes($DirToCheckForDupes , $Recurse = 0)

   FileDelete("c:\Windows\Temp\testbashfdupes.txt")
   $ErrFileWrite = $Recurse = 0 ? FileWrite("c:\Windows\Temp\testbashfdupes.txt" , "fdupes .") : FileWrite("c:\Windows\Temp\testbashfdupes.txt" , "fdupes -r .")
   $iPID = run("cmd /k bash //mnt/c//Windows/Temp/testbashfdupes.txt" , $DirToCheckForDupes)


   ClipPut("")

      Do
         winactivate("cmd.exe")
         winwaitactive("cmd.exe")
         WinSetOnTop("cmd.exe" , "" , 1)
         send("^a" )
         send("{ENTER}")
            sleep(2000)
         consolewrite(stringright(ClipGet() , 1) & @LF)
      Until stringright(ClipGet() , 1) = ">"

   ProcessClose($iPID)

  $aOut = stringsplit(clipget() , @LF , 2)

For $i = ubound($aOut) - 1 to 0 step -1
  If stringleft($aOut[$i] , 2) = "Pr" OR stringleft($aOut[$i] , 2) = "Bu" OR stringleft($aOut[$i] , 2) = "C:"  Then _ArrayDelete($aOut , $i)
Next

  return $aOut

EndFunc

 

,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-.
|(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/
(_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_)
| | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) (
| | | | |)| | \ / | | | | | |)| | `--. | |) \ | |
`-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_|
'-' '-' (__) (__) (_) (__)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...