Bash

無法解析函式的輸出

  • December 5, 2016

我正在編寫一個 Bash 腳本,它應該執行其他守護程序的 Bash 腳本,稱為 servlet。

我要查詢的功能是getStatus

getStatus() {
    servletToCheck="$@"
    if [ "$(ps -aux | grep \"$(whoami)\" | grep \"${servletToCheck}\" | grep -v \"grep\" | wc -l)" -eq 0 ]; then
       echo -n "Offline"
    else
       echo -n "Online"
    fi
}

應該做的是檢查參數是否是使用者擁有的正在執行的程序,Online如果是則輸出,Offline否則。

現在,這個功能似乎執行良好。問題似乎與我如何解析它有關:

if [ "$(getStatus ${tbnServlet})" == "Online" ]; then
   outSuccess "Started servlet: ${tbnServlet}"
   exit 0
else
   outWarning "Failed to start servlet: ${tbnServlet}"
   exit 3
fi

奇怪的是,即使 servlet 啟動並執行,它也會顯示它Failed to start/stop servlet,並且執行一個列出 servlet 的函式會將所有這些 servlet 都列為離線,即使它們不是。

問題是什麼,我該如何糾正?

您的程式碼對於這項基本工作來說太複雜了……

pgrep -u $USER "$tbnServlet" >/dev/null && echo "Started servlet: $tbnServlet" || echo "Failed to start servlet: $tbnServlet"

引用自:https://unix.stackexchange.com/questions/328043