第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何使用 exex(go) 在 linux/macOS 中正確模擬終端?

如何使用 exex(go) 在 linux/macOS 中正確模擬終端?

Go
UYOU 2022-06-06 15:08:47
我需要在go. 我嘗試這樣做:lsCmd := exec.Command("bash", "-c", "ls")lsOut, err := lsCmd.Output()if err != nil {    panic(err)}fmt.Println(string(lsOut))而且它似乎工作正常(本機(jī) ubuntu 終端顯示一個(gè)水平列表,這個(gè)函數(shù)的結(jié)果是垂直的)。但是,如果我專(zhuān)門(mén)調(diào)用了錯(cuò)誤的命令,例如exec.Command ("bash", "-c", "lss"),我會(huì)得到:恐慌:退出狀態(tài) 127在本機(jī) ubuntu 終端中,我得到以下結(jié)果:找不到命令“l(fā)ss”,您的意思是:和命令的枚舉。如果我在標(biāo)準(zhǔn) ubuntu 終端中編寫(xiě)命令,我需要與本機(jī)終端通信,并得到與命令結(jié)果相同的結(jié)果。做這個(gè)的最好方式是什么?也許exec圖書(shū)館不適合這個(gè)?所有這些對(duì)于與 OS 終端的前端通信都是必需的。在一個(gè)簡(jiǎn)單的html/css/js頁(yè)面上,用戶(hù)輸入一個(gè)命令,然后go將其發(fā)送到操作系統(tǒng)的本機(jī)終端,并將結(jié)果返回給前端。如何獲得與在本機(jī)終端中工作一樣的執(zhí)行命令結(jié)果?
查看完整描述

1 回答

?
慕慕森

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個(gè)贊

問(wèn)題

但是,如果我專(zhuān)門(mén)調(diào)用了錯(cuò)誤的命令,例如 exec.Command ("bash", "-c", "lss"),我會(huì)得到:

panic: exit status 127

在本機(jī) ubuntu 終端中,我得到以下結(jié)果:

Command 'lss' not found, did you mean:

和命令的枚舉。

這與 Go 無(wú)關(guān),問(wèn)題實(shí)際上有兩個(gè)方面:

  • Ubuntu 附帶一個(gè)特殊的包,command-not-found通常是預(yù)先安裝的,它通過(guò)使用兩種技術(shù)來(lái)嘗試使終端對(duì)普通人更友好:

    • 它試圖建議更正拼寫(xiě)錯(cuò)誤(您的情況)。

    • 當(dāng)用戶(hù)嘗試執(zhí)行一個(gè)程序時(shí),它會(huì)嘗試建議要安裝的軟件包,如果用戶(hù)安裝了特定的軟件包,該程序?qū)⒖捎谩?/p>

  • 當(dāng)找不到該命令時(shí),“plain”(見(jiàn)下文)shell 通過(guò)返回非零退出代碼使嘗試失敗。
    這是完全可以預(yù)料和正常的。我的意思是,對(duì)此感到恐慌是絕對(duì)不明智的。

  • 在 Unix 系統(tǒng)上運(yùn)行 shell 的方式存在歷史差異。

    當(dāng)用戶(hù)登錄系統(tǒng)時(shí)(請(qǐng)記住,在發(fā)明外殼概念的日子里,您將通過(guò)硬件計(jì)算機(jī)終端登錄,這基本上是您的 GNOME 終端窗口,但在硬件中,并通過(guò)電線(xiàn)連接),即啟動(dòng)所謂的登錄shell
    邏輯外殼的主要思想是為用戶(hù)提供交互環(huán)境。

    但是您肯定知道,shell 也能夠執(zhí)行腳本。當(dāng) shell 執(zhí)行腳本時(shí),它以非交互模式運(yùn)行。

Unix shell 可以工作的模式

現(xiàn)在讓我們更深入地研究交互式與非交互式 shell。

  • 在交互模式下:

    • shell 通常連接到真實(shí)終端(hadrware 或終端仿真器;您的 GNOME 終端窗口是終端仿真器)。
      “已連接”是指將shell 的標(biāo)準(zhǔn)I/O 流連接到終端,以便終端顯示shell 打印的內(nèi)容。

    • 它為用戶(hù)啟用了某些花里胡哨,通常提供有限的方法來(lái)編輯正在輸入的內(nèi)容(bash例如,使用 GNUreadline .

  • 在非交互模式下:

    • shell 的標(biāo)準(zhǔn) I/O 流連接到一些文件(或“無(wú)處”——比如/dev/null)。

    • 沒(méi)有啟用任何花里胡哨的功能——因?yàn)闆](méi)有人可以使用它們。

GNUbash能夠在這兩種模式下運(yùn)行,它運(yùn)行在哪種模式下取決于它是如何被調(diào)用的。

在不同的模式下初始化時(shí),bash 讀取不同的初始化腳本,這就解釋了為什么command-not-found包提供的機(jī)器會(huì)進(jìn)入交互模式,而在其他情況下運(yùn)行 bash 時(shí)不會(huì)——就像你從 Go 調(diào)用一樣。

遇到問(wèn)題怎么辦

最簡(jiǎn)單的嘗試是使用--login命令行選項(xiàng)運(yùn)行 bash,或者讓它認(rèn)為它作為交互式 shell 運(yùn)行。

這可能會(huì)解決您的問(wèn)題,但不一定。
下一個(gè)可能的問(wèn)題是,有些程序確實(shí)會(huì)檢查它們是否在終端上運(yùn)行——通常這些程序堅(jiān)持與用戶(hù)進(jìn)行真正的交互,通常是出于安全目的,有些程序在未連接到終端時(shí)根本無(wú)法運(yùn)行一個(gè)真正的終端——這些是“全屏”文本 UI 程序,例如 GNU Midnight Commander、Vim、Emacs、GNU Nano 和類(lèi)似的任何東西。

要解決這個(gè)問(wèn)題,唯一的解決方案是在偽終端環(huán)境中運(yùn)行 shell,這就是 @eudore 在他們的評(píng)論中暗示的。可能是一個(gè)開(kāi)始查看的包
;還提供了一些方法來(lái)糾纏 PTY。github.com/creack/ptygolang.org/x/crypto/ssh


查看完整回答
反對(duì) 回復(fù) 2022-06-06
  • 1 回答
  • 0 關(guān)注
  • 197 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)