当前位置: 首页 > 面试题库 >

使用某些参数调用命令有效,但不能使用其他参数从控制台正常运行

柴丰
2023-03-14
问题内容

以下代码起作用并输出10个进程的详细信息。

package main

import (
    "os/exec"
)

func main() {
    print(top())
}

func top() string {
    app := "/usr/bin/top"

    cmd := exec.Command(app, "-n 10", "-l 2")
    out, err := cmd.CombinedOutput()

    if err != nil {
        return err.Error() + " " + string(out)
    }

    value := string(out)
    return value
}

但是,当我尝试使用附加参数“ -o cpu”进行相同操作时(例如,cmd:= exec.Command(app,“ -o cpu”,“ -n 10”,“
-l 2”))。我收到以下错误。

exit status 1 invalid argument -o:  cpu
/usr/bin/top usage: /usr/bin/top
        [-a | -d | -e | -c <mode>]
        [-F | -f]
        [-h]
        [-i <interval>]
        [-l <samples>]
        [-ncols <columns>]
        [-o <key>] [-O <secondaryKey>]
        [-R | -r]
        [-S]
        [-s <delay>]
        [-n <nprocs>]
        [-stats <key(s)>]
        [-pid <processid>]
        [-user <username>]
        [-U <username>]
        [-u]

但是我的控制台中的命令“ top -o cpu -n 10 -l 2”可以正常工作。我也在使用OS X 10.9.3。


问题答案:

分开论点。

top -o cpu -n 10 -l 2不是 你正在执行什么。您作为命令参数传递的内容等同于top "-o cpu" "-n 10" "-l 2"在shell中使用(如果尝试,它将为您提供完全相同的输出)。

大多数命令都会严格将其解析为3个参数。由于POSIX参数不需要空格,因此top将分割-o为第一个选项,并将其余部分用作其参数。这主要是偶然地用于数字参数,但是for
-o查找一个名为的字段" cpu",而没有。

相反,使用

exec.Command(app, "-o", "cpu", "-n", "10", "-l", "2")


 类似资料:
  • 问题内容: 我必须做一个应用程序的演示,该应用程序有一个server.jar和client.jar。两者都有命令行参数,并且是可执行的。我需要启动两个server.jar实例和两个client.jar实例。 我以为使用批处理文件是可行的方法,但是批处理文件会执行第一个命令(即> server.bat [argument1] [argument2]),并且除非关闭第一个实例,否则不会执行其他任何操作

  • 我正在做一个与运行时间有关的练习。exec(),我理解这个运行时。exec不是shell解释器,这就是为什么我执行“bash-c'command'”,但出于某种原因,我可以执行像ls这样的命令,但不能执行echo或重定向或多个命令。这些都不起作用: 这是我的java代码: 我使用以下语法运行上述命令: 这是有效的: 我在Ubuntu 20.04和zsh上使用openjdk 11.0.15。有人能告

  • 我正在做一个与Runtime.exec()相关的练习,我明白Runtime.exec不是一个shell解释器,这就是为什么我执行"bash-c'命令'"来代替,但是出于某种原因,我可以执行ls之类的命令,但不能执行回显或重定向或多个命令。这些不起作用: 这是我的java代码: 我使用语法运行上述命令: 这工作原理: 我在Ubuntu 20.04和zsh上使用openjdk 11.0.15。有人能告

  • 问题内容: 在Java中传递-D参数时,编写命令行然后从代码访问它的正确方法是什么? 例如,我尝试编写类似这样的内容… 然后这样称呼… 但是我收到一个NullPointerException。我究竟做错了什么? 问题答案: 我怀疑问题是您将“ -D”放在了。 之后。试试这个: 从命令行帮助: 换句话说,此刻获得的方式将被视为要传递的参数之一,而不是JVM参数。 (您可能 还 应该删除引号,但是无论

  • 问题内容: 经过一些挖掘后,我可以这样运行Linux命令: 我想做的是,在远程计算机上运行以下命令: 我可以从终端成功完成此操作,但是当我尝试在Go中运行它时,出现以下错误: 更新 :为了方便起见,我更新了问题。 问题答案: 根据有关exec软件包的文档,程序名称和参数是方法的不同参数。您应该这样做: 如果您需要更详细的说明,还可以查看go.crypto / ssh 软件包。

  • 我有一个格式如下的url: http://www.example.com/path?param1=value1&param2=value2 我需要一个正则表达式以任何顺序匹配路径和params1和params2,但如果param3存在,那么我需要它失败,这样: 因此,我尝试使用lookarounds来匹配参数,但它失败了: 有什么想法吗? 警局。奇怪的是,我试图匹配AndroidManifest.