使用NSTask調用shell

来源:http://www.cnblogs.com/JanaChen/archive/2016/09/19/5883966.html
-Advertisement-
Play Games

該方法傳入一個NSString類型的命令字元串,返回運行結果。但是使用這種方法沒法記憶上一次操作,沒法做到像在終端中執行多次命令那樣自如。 例如:先cd到桌面,然後在桌面新建文件夾,在終端中我們是這麼實現的: 使用NSTask調用: ...


- (NSString *)cmd:(NSString *)cmd
{
    // 初始化並設置shell路徑
    NSTask *task = [[NSTask alloc] init];
    [task setLaunchPath: @"/bin/bash"];
    // -c 用來執行string-commands(命令字元串),也就說不管後面的字元串里是什麼都會被當做shellcode來執行
    NSArray *arguments = [NSArray arrayWithObjects: @"-c", cmd, nil];
    [task setArguments: arguments];
    
    // 新建輸出管道作為Task的輸出
    NSPipe *pipe = [NSPipe pipe];
    [task setStandardOutput: pipe];
    
    // 開始task
    NSFileHandle *file = [pipe fileHandleForReading];
    [task launch];
    
    // 獲取運行結果
    NSData *data = [file readDataToEndOfFile];
    return [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
}

該方法傳入一個NSString類型的命令字元串,返回運行結果。但是使用這種方法沒法記憶上一次操作,沒法做到像在終端中執行多次命令那樣自如。

例如:先cd到桌面,然後在桌面新建文件夾,在終端中我們是這麼實現的:

JanaChen'sMac:~ JanaChen$ cd Desktop
JanaChen'sMac:~ JanaChen$ mkdir helloWorld

使用NSTask調用:

// 這種調用方式結果是錯誤的,因為一條命令執行完Task就會銷毀,相當於輸入完終端關閉,再打開再輸出,這時執行第二條語句時第一條語句已經不起作用了
[self cmd:@"cd Desktop"];
[self cmd:@"mkdir helloWorld"];

// 應使用下麵這種方式實現
[self cmd:@"cd Desktop; mkdir helloWorld"];

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • DW一直以來是企業信息與決策支持系統的核心組件,隨著各類日誌、社交、感測等非結構化數據的加入,企業內部數據按指數級增長,傳統DW已經達到一個關鍵臨界點——需要大量的資源投入到硬體、優化、支持和維護中,當前大部分使用Apache Hadoop來處理各種來源的大數據,但傳統數據倉庫不允許最終用戶查詢非結 ...
  • 當微軟發佈第一個SQL Server並行數據倉庫R2時(SQL ServerParallel Data Warehouse,即PDW),已正式將產品的名稱修改為分析服務平臺(APS),但在一些非正式場合,仍然保留了PDW的叫法 目錄: APS簡介 APS特性 NEC一體機 戴爾資料庫一體機 小結 A ...
  • 運行級別 級別說明 0 所有進程將被終止,機器將有序的停止,關機時系統處於這個運行級別 1 單用戶模式,用於系統維護,只有少數進程運行,同時所有服務也不啟動 2 多用戶模式,和運行級別3一樣,只是網路問卷系統(NFS)服務沒有啟動 3 多用戶模式,允許多用戶登錄系統,是系統預設的啟動級別 4 留給用 ...
  • 一、系統分區 首先先普及一下有關係統分區的一些知識: 硬碟分區有三種,主磁碟分區、擴展磁碟分區、邏輯分區。 一個硬碟主分區至少有1個,最多4個,擴展分區可以沒有,最多1個。且主分區+擴展分區總共不能超過4個。邏輯分區可以有若幹個。在windows下激活的主分區是硬碟的啟動分區,他是獨立的,也是硬碟的 ...
  • 插入無線網卡,輸入ifconfig,發現沒有檢測到網卡。 輸入lsusb,查看無線網卡型號。 我用的無線網卡是EDUP的網卡,包裝盒裡有一張驅動光碟,把光碟里linux下的驅動目錄複製下來。如果沒有驅動光碟,可以去網上下載RTL8188的Linux版驅動包。 提前準備好ARM板系統的交叉編譯器和系統 ...
  • Ubuntu16.04 1.chrome安裝 獲取安裝包http://www.google.cn/chrome/browser/desktop/index.html 在安裝包目錄打開終端執行sudo dpkg -i google-chrome-stable_current_amd64.deb 若有錯 ...
  • 本文主要介紹了在NAS-DSM系統上部署Finereport數據決策系統。 ...
  • 創建基於對話框的Win32應用程式(四)——Edit Control的應用、Unicode轉ANSI、自動滾動 之前的介紹中,我們用到了Button、Static Text、Checkbox這三個控制項。這一節中我們將學習使用Edit Control(編輯框)控制項,其中還包括Unicode轉ANSI的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...