Windows cmd pass output of one command as parameter to another
21,603
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
Related videos on Youtube
Author by
Arijoon
Updated on July 09, 2022Comments
-
Arijoon almost 2 years
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 asgit diff
doesn't support itgit status -s -b | sed -n '2p' | cut -d' ' -f2- | git diff // results in illegal seek
-
user2956477 about 7 yearsUse doublequotes in windows instead of singlequotes (as on linux).
-
Bali C about 7 yearsTry escaping the pipe with
^
, i.e.-s -b ^| sed
-
-
Arijoon about 7 yearsThis 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 fromgit status
output -
Patrick Michaelsen over 5 yearsEverything is so simple in linux
-
bigjosh about 3 years@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 withvar=$(cmd)
and that output has JSON in it, then the JSON gets mangled. So maybe we can agree that both BASH and WINBAT suck? :)