簡體   English   中英

如何從Mac上的Shell腳本獲取輸出?

[英]How to get output from shell script on mac?

我想在shell腳本中運行命令並檢查其輸出。如果它具有某些文本,我想將全局變量設置為特定的字符串。以下是我到目前為止所做的事情。 命令~/Library/Android/sdk/tools/android list | grep 'The "android" command is deprecated. ~/Library/Android/sdk/tools/android list | grep 'The "android" command is deprecated. 在終端中工作,但是在shell腳本中似乎不工作。 我在這里想念什么?

#!/bin/bash
Android_Command=''    

MKCOMMAND='~/Library/Android/sdk/tools/android list | grep 'The "android" command is deprecated.''
RESP=$($MKCOMMAND)
echo $RESP

if [ '$RESP'=='The "android" command is deprecated.' ]; then
 Android_Command='Version2'
else
 Android_Command='Version1'
fi

以下是我得到的輸出

 ~/Library/Android/sdk/tools/android: No such file or directory

從上一次編輯可以清楚地看到,您不是從終端執行腳本,而是從其中執行一行。

在shell腳本中,單引號內的所有內容都不受shell擴展的約束。 話雖如此, ~| 無法引用。

重定向是在執行前由Shell創建的。 這意味着無法執行MKCOMMAND因為管道| 將被視為android命令的參數。

那么我們如何處理這種腳本呢? 不要引用任何重定向。

#!/bin/bash

if ~/Library/Android/sdk/tools/android list | grep -q 'The "android" command is deprecated.'; then
 Android_Command='Version2'
else
 Android_Command='Version1'
fi

if語句接受一個復雜的語句。 如果找到字符串,則grep -q將返回零,否則返回非零。

請嘗試直接運行命令(而不使用MKCOMMAND變量):

RESP=$(~/Library/Android/sdk/tools/android list | grep 'The "android" command is deprecated.')
echo $RESP
...

這種(快速!)黑客可能會繞過您可能遇到的一些Bash 報價問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM