首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sh不是在从zsh切换到bash之后进行响应的函数。

sh不是在从zsh切换到bash之后进行响应的函数。
EN

Stack Overflow用户
提问于 2022-05-31 00:30:02
回答 1查看 219关注 0票数 0

在mac中,我从bash切换到zsh,然后zsh切换回bash。

chsh -s zsh

切换回bash

代码语言:javascript
复制
'use strict'

const sh = require('shell-exec')

module.exports = function (port, method = 'tcp') {
  port = Number.parseInt(port)

  if (!port) {
    return Promise.reject(new Error('Invalid argument provided for port'))
  }

  if (process.platform === 'win32') {
    return sh(
      `Stop-Process -Id (Get-Net${method === 'UDP' ? 'UDP' : 'TCP'}Connection -LocalPort ${port}).OwningProcess -Force`
    )
  }

  return sh(
    `lsof -i ${method === 'udp' ? 'udp' : 'tcp'}:${port} | grep ${method === 'udp' ? 'UDP' : 'LISTEN'} | awk '{print $2}' | xargs kill -9`
  )
}


TypeError: sh is not a function

更新1:

https://github.com/tiaanduplessis/shell-exec/blob/master/src/index.ts

代码语言:javascript
复制
import * as childProcess from "child_process";

type Command = string | string[];

interface CmdResult {
  code?: number | null;
  stdout: string;
  stderr: string;
  error?: Error;
  cmd: string;
}

export interface FailedExec extends CmdResult {
  error: Error;
}
export interface SuccessfulExec extends CmdResult {
  code: number | null;
}

function shellExec(
  cmd: Command,
  opts?: Omit<childProcess.SpawnOptionsWithoutStdio, "stdio" | "cwd">
): Promise<CmdResult> {
  const executable = Array.isArray(cmd) ? cmd.join(";") : cmd;
  const options: childProcess.SpawnOptionsWithoutStdio = {
    ...opts,
    stdio: "pipe",
    cwd: process.cwd(),
  };

  const { platform } = process;

  try {
    const cmd = platform === "win32" ? "cmd" : "sh";
    const arg = platform === "win32" ? "/C" : "-c";
    const child = childProcess.spawn(cmd, [arg, executable], options);

    return new Promise((resolve) => {
      const stdoutList: string[] = [];
      const stderrList: string[] = [];

      if (child.stdout) {
        child.stdout.on("data", (data) => {
          if (Buffer.isBuffer(data)) return stdoutList.push(data.toString());
          stdoutList.push(data);
        });
      }

      if (child.stderr) {
        child.stderr.on("data", (data) => {
          if (Buffer.isBuffer(data)) return stderrList.push(data.toString());
          stderrList.push(JSON.stringify(data));
        });
      }

      const getDefaultResult = () => {
        const stderr = stderrList.join("\n");
        const stdout = stdoutList.join("\n");
        return { stdout, stderr, cmd: executable };
      };

      child.on("error", (error) => resolve({ ...getDefaultResult(), error }));
      child.on("close", (code) => resolve({ ...getDefaultResult(), code }));
    });
  } catch (error) {
    return Promise.reject(error);
  }
}

export default shellExec;

在我的react项目中,shell-exec看起来不存在吗?

EN

回答 1

Stack Overflow用户

发布于 2022-05-31 13:21:29

你的代码应该能用。作为一种解决办法,尝试:

代码语言:javascript
复制
const sh = require('shell-exec').default
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72441147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档