Comments (3)
I'm tempted to say that this is a bug in CMD, although I realize that's unhelpful. I'll try messing around with this when I have some spare time to see what it's willing to accept.
This bug occurs because foo.cmd is a CMD script, so Yori is trying to construct a command to execute CMD with the specified script. In this case, it will build:
C:\Windows\system32\cmd.exe /c "C:\Program Files\Foo\bin\foo.cmd" "--help"
If you type this command into CMD, you'll see the error above. The error is coming from CMD, not Yori. It looks like CMD is taking everything following the "/c" as a single string, and parsing it again, losing the benefit of the quotes. So it tries to execute:
C:\Program Files\Foo\bin\foo.cmd --help
which confuses CMD because it can't resolve the script name.
What's odd is that
C:\Windows\system32\cmd.exe /c "C:\Program Files\Foo\bin\foo.cmd" --help
does resolve the script name correctly. It really looks like CMD is looking for the final quote -- being greedy -- then taking the string in the middle and re-parsing it. But if that's true, the question is how to tell it what the real script name is.
from yori.
Aha, interesting!
The examples on ss64.com suggest that in cases like this, one should add extra quotes around the whole command string. So to make my example work, Yori should execute
C:\Windows\system32\cmd.exe /c ""C:\Program Files\Foo\bin\foo.cmd" "--help""
The relevant part from CMD help is this:
If /C or /K is specified, then the remainder of the command line after
the switch is processed as a command line, where the following logic is
used to process quote (") characters:
1. If all of the following conditions are met, then quote characters
on the command line are preserved:
- no /S switch
- exactly two quote characters
- no special characters between the two quote characters,
where special is one of: &<>()@^|
- there are one or more whitespace characters between the
two quote characters
- the string between the two quote characters is the name
of an executable file.
2. Otherwise, old behavior is to see if the first character is
a quote character and if so, strip the leading character and
remove the last quote character on the command line, preserving
any text after the last quote character.
Basically, case 1 is the reason this works:
C:\Windows\system32\cmd.exe /c "C:\Program Files\Foo\bin\foo.cmd" --help
however case 1 only applies in limited situations ("exactly two quote characters"), so the aim should be to always trigger case 2. This can also be forced with the /S
switch.
from yori.
I just released 1.21 which I believe fixes this issue. You can upgrade an existing install with ypm -u
. If you find any additional problems, please either reopen this issue or file a new one describing that problem. Thanks for the report!
from yori.
Related Issues (20)
- Ctrl-C stops working after terminating GUI app once HOT 5
- Provide all installer options as command line arguments HOT 2
- Allow for a custom starting directory HOT 2
- Command line length limit in Yori ? Like 8191 in cmd ? HOT 2
- Implement long path pseudo current directory HOT 4
- Broken alias command for paths with spaces HOT 2
- Feature request: Option in Tee to remove color HOT 2
- yori's lsof breaks react-scripts HOT 3
- Yori installer for the arm64 Windows HOT 4
- current version -- 2.0 is marked as infected with a trojan by Windows Defender HOT 3
- yenv: accept variable from stdin HOT 4
- "cab.exe -s -u" does not overwrite files with read-only and system attributes set HOT 2
- "ycopy.exe -p" raises ERRORLEVEL to 1 if there is nothing to overwrite HOT 1
- Can't run Notepad HOT 2
- YoriInit.ys1 script %__APPDIR__% and %__CD__% environment variables on Windows XP HOT 2
- throw er; // Unhandled 'error' event HOT 2
- fail to install yori-core on amd HOT 2
- If ErrorLevel / Is Yori Elevated ? HOT 20
- yhash not supported in Windows XP HOT 4
- Scrolling with mouse wheel in Windows Terminal isn't working unless you hold down Shift while scrolling HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from yori.