【问题标题】:how to get the linux terminal name如何获取linux终端名称
【发布时间】:2021-03-10 05:08:24
【问题描述】:

我想在 linux 中使用终端执行命令。现在为了做到这一点,我不能像 Windows 那样对 cmd 进行硬编码。如何以编程方式从 java 获取终端名称作为字符串?

new ProcessBuilder(new String[] {"xfce4-terminal", "--title="+windowTitle, "--hold", "-x", "java", "-jar", decodedPath, "run"}).start();

注意字符串“xfce4-terminal”。这取决于他们拥有的 linux 发行版。有什么可靠的方法来获取 java 命令的终端 exe。在我看来,它应该由 System.getProperty("os.terminal") 但是,它不存在。

【问题讨论】:

  • 您尝试过类似dzone.com/articles/execute-shell-command-java 的方法吗?
  • 任何发行版都可以安装多个。也许有一个偏好列表,包括 xterm 作为默认值
  • @FabienMIFSUD 我认为这是一个选项,但是列出了太多数据,我只需要操作系统终端名称并可靠地获取它。
  • @stark 所有的 linux 都有 xterm 吗?我需要在新窗口中打开终端并执行命令。
  • 不保证。

标签: java linux terminal command


【解决方案1】:

这里是确定os终端的跨平台方式。支持windows、mac和linux

    public static String osName = System.getProperty("os.name");
    public static String[] windows_terminals = new String[]
    {
        "cmd",
        "powershell",//seems to freak out and seems to be beta even in 2020 with all it's bugs
    };
    
    public static String[] mac_terminals = new String[]
    {
        "bin/bash"  
    };
    
    public static String[] linux_terminals = new String[]
    {
            "/usr/bin/gcm-calibrate",
            "/usr/bin/gnome-terminal",
            "/usr/bin/mosh-client",
            "/usr/bin/mosh-server",
            "/usr/bin/mrxvt",           
            "/usr/bin/mrxvt-full",        
            "/usr/bin/roxterm",          
            "/usr/bin/rxvt-unicode",        
            "/usr/bin/urxvt",             
            "/usr/bin/urxvtd",
            "/usr/bin/vinagre",
            "/usr/bin/x-terminal-emulator",
            "/usr/bin/xfce4-terminal",   
            "/usr/bin/xterm",
            "/usr/bin/aterm",
            "/usr/bin/guake",
            "/usr/bin/Kuake",
            "/usr/bin/rxvt",
            "/usr/bin/rxvt-unicode",
            "/usr/bin/Terminator",
            "/usr/bin/Terminology",
            "/usr/bin/tilda",
            "/usr/bin/wterm",
            "/usr/bin/Yakuake",
            "/usr/bin/Eterm",
            "/usr/bin/gnome-terminal.wrapper",
            "/usr/bin/koi8rxterm",
            "/usr/bin/konsole",
            "/usr/bin/lxterm",
            "/usr/bin/mlterm",
            "/usr/bin/mrxvt-full",
            "/usr/bin/roxterm",
            "/usr/bin/rxvt-xpm",
            "/usr/bin/rxvt-xterm",
            "/usr/bin/urxvt",
            "/usr/bin/uxterm",
            "/usr/bin/xfce4-terminal.wrapper",
            "/usr/bin/xterm",
            "/usr/bin/xvt"
    };
    
    public static String getTerminal()
    {
        String[] cmds = getTerminals(osName);
        for(String cmd : cmds)
        {
            try 
            {
                Runtime.getRuntime().exec(cmd + " cd " + System.getProperty("user.dir"));
                return cmd;
            } 
            catch (Throwable e) {}
        }
        return null;
    }

    public static String[] getTerminals(String os)
    {
        return os.contains("windows") ? windows_terminals : os.contains("mac") ? mac_terminals : os.contains("linux") ? linux_terminals : null;
    }

【讨论】:

    猜你喜欢
    • 2021-09-14
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 2012-06-13
    • 2018-12-01
    相关资源
    最近更新 更多