31

In linux it is possible t do this:

git diff $(git status -s -b | sed -n '2p' | cut -d' ' -f2-)

or a simpler case

ls $(pwd) 

The question is how can I achieve the same in windows? (not using a batch file, a one liner in command prompt). Not all commands support piping so how can we evaluate one and pass result as parameter to another?

I've tried piping and < and > but none work.

git diff < (git status -s -b | sed -n '2p' | cut -d' ' -f2-) 

Try that yourself it expects a file. And | doesn't work either as git diff doesn't support it

git status -s -b | sed -n '2p' | cut -d' ' -f2- | git diff // results in illegal seek
2
  • Use doublequotes in windows instead of singlequotes (as on linux). Commented Apr 5, 2017 at 8:43
  • Try escaping the pipe with ^, i.e. -s -b ^| sed Commented Apr 5, 2017 at 8:45

1 Answer 1

42

There is no $ operator in cmd.
Redirection operators (<, >, >>) expect files or stream handles.
A pipe | passes the standard output of a command into the standard input of another one.

A for /F loop however is capable of capturing the output of a command and providing it in a variable reference (%A in the example); see the following code:

for /F "usebackq delims=" %A in (`git status -s -b ^| sed -n '2p' ^| cut -d' ' -f2-`) do git diff %A
Sign up to request clarification or add additional context in comments.

5 Comments

This is exactly what I was looking for. Update for for /F "usebackq delims=" %A in (`git status -s -b ^| sed -n '$1p' ^| cut -d" " -f3`) do git diff %A $2 $3 $4 ($n is command line arguments for this alias) and it'll diff the right file by number from git status output
Everything is so simple in linux
@PatrickMichaelsen I just spent better part of an hour on a 3 line BASH script because (1) alias just don't work in a shell script, (2) if you assign the output of a command to a variable with var=$(cmd) and that output has JSON in it, then the JSON gets mangled. So maybe we can agree that both BASH and WINBAT suck? :)
@bigjosh maybe cross platform PowerShell worth a try :)
Nothing mangles JSON in a command substitution. Something else was wrong there. (But yeah, aliases suck.)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.