gpt4 book ai didi

node.js - 如果相同目录中存在同名文件,则省略 “.cmd”时,调用运算符(operator)(&)在新窗口中运行命令

转载 作者:行者123 更新时间:2023-12-02 22:48:07 27 4
gpt4 key购买 nike

如果我在命令中省略了后缀“.cmd”,则会在新窗口中打开它。为什么是这样?是什么触发新窗口打开的?
Powershell 5 Powershell Core 7 中,以下第一个将导致打开一个新窗口,而其他三个将在同一窗口中显示输出:

  • & 'C:\some_path\node_modules\.bin\ava' 'help'
  • & '.\node_modules\.bin\ava' 'help'(之前使用过的cd C:\some_path)
  • & 'C:\some_path\node_modules\.bin\ava.cmd' 'help'
  • & 'C:\some_path\node_modules\.bin\ava.ps1' 'help'

  • 同时,在 cmd 中,所有三个程序在同一窗口中显示其输出,根本没有打开新窗口:
  • C:\some_path\node_modules\.bin\ava help
  • .\node_modules\.bin\ava help(之前使用过的cd C:\some_path)
  • C:\some_path\.bin\ava help

  • 我仅以help命令为例,最后我喜欢使用 ava debug --serial someFile.js
    软件版本:
  • Windows:Windows 10版本2004(内部版本19041.388)
  • 节点:v12.18.3
  • AVA:3.11.0
  • .bin目录中有三个相关文件: ava.cmd
    @ECHO off
    SETLOCAL
    CALL :find_dp0

    IF EXIST "%dp0%\node.exe" (
    SET "_prog=%dp0%\node.exe"
    ) ELSE (
    SET "_prog=node"
    SET PATHEXT=%PATHEXT:;.JS;=;%
    )

    "%_prog%" "%dp0%\..\ava\cli.js" %*
    ENDLOCAL
    EXIT /b %errorlevel%
    :find_dp0
    SET dp0=%~dp0
    EXIT /b
    ava.ps1
    #!/usr/bin/env pwsh
    $basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent

    $exe=""
    if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
    # Fix case when both the Windows and Linux builds of Node
    # are installed in the same directory
    $exe=".exe"
    }
    $ret=0
    if (Test-Path "$basedir/node$exe") {
    & "$basedir/node$exe" "$basedir/../ava/cli.js" $args
    $ret=$LASTEXITCODE
    } else {
    & "node$exe" "$basedir/../ava/cli.js" $args
    $ret=$LASTEXITCODE
    }
    exit $ret
    ava
    #!/bin/sh
    basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")

    case `uname` in
    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
    esac

    if [ -x "$basedir/node" ]; then
    "$basedir/node" "$basedir/../ava/cli.js" "$@"
    ret=$?
    else
    node "$basedir/../ava/cli.js" "$@"
    ret=$?
    fi
    exit $ret

    由于该调用是通过Visual Studio代码使用 proposed configuration调试AVA脚本完成的,因此,我对所使用命令的影响是有限的。
    $env:PATHEXT等于 .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL
    如果我将文件 ava重命名为 ava_2,则不再打开任何新窗口。如果创建了一个名为 ava的空文件,则命令 & 'C:\some_path\node_modules\.bin\ava' 'help'再次打开一个新窗口。

    最佳答案

    为什么不使用Start-Process代替,所以您可以控制它是否打开一个新窗口?

    Start-Process -FilePath 'C:\some_path\node_modules\.bin\ava' -ArgumentList 'help' -NoNewWindow -Wait

    关于node.js - 如果相同目录中存在同名文件,则省略 “.cmd”时,调用运算符(operator)(&)在新窗口中运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63224532/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com