#!/bin/bash
#gedit tidy plugin
init=false
SRC_DIR=~/repos
DIRECTORY="Gedit-Clientside-Plugin"
#making repos directory
if [ ! -d "$SRC_DIR" ]; then mkdir $SRC_DIR; fi
if [ ! -d "$SRC_DIR/$DIRECTORY" ]; then
init=true
cd $SRC_DIR && pwd && git clone git://github.com/trentrichardson/Gedit-Clientside-Plugin.git && cd $DIRECTORY
else
cd $SRC_DIR/$DIRECTORY
fi
#below here is what I'm having trouble with
git pull 1>&1 | grep "Already up-to-date."
if [[ ! $? -eq 0 && ! $init ]]; then
read -e -p "## Branch moved, build and install Gedit-Clientside-Plugin? [Y/n] " yn
if [[ $yn == "y" || $yn == "Y" || $yn == "" ]] ; then
if [ ! -d "/usr/share/gedit/plugins/clientside" ]; then
sudo cp ~/repos/Gedit-Clientside-Plugin/clientside /usr/share/gedit/plugins/ -r
else
echo "Directory already exists."
fi
fi
fi
上述代碼是我從腳本中編輯過的東西,我在stackoverflow上找到了從git存儲庫安裝Emacs的腳本。我想要這個腳本要做的是從git repos安裝任何程序,並在需要更新時更新它們。當然,我將不得不提供安裝它的步驟。在這個腳本的情況下,它只需要將clientside
目錄複製到/usr/share/gedit/plugins/
目錄。如何編寫一個shell腳本來檢查git倉庫是否是最新的?
我不需要任何幫助,如何安裝任何腳本,但我需要的是如何檢查存儲庫是否是最新的,並從那裏去。
現在我不明白的是這部分:
git pull 1>&1 | grep "Already up-to-date."
if [[ ! $? -eq 0 && ! $init ]]; then
.....
fi
當我在終端運行git pull 1>&1 | grep "Already up-to-date." && $?
輸出爲Already up-to-date. 0
。所以我明白這是檢查更新的部分,但下一部分不執行(if語句) - 這是將目錄複製到gedit插件目錄的部分。我不明白什麼1>$1
的意思或什麼$?
的含義。因此我無法解決問題...而我不明白的是爲什麼它認爲Branch is moved
不是最新的(我只是假設它說git pull
在if語句中不返回0
)。
我敢肯定,它有一個簡單的解決方案,答案將是教育bash和git。我感謝所有的幫助。
我使用的是Ubuntu 12.04。
'1&1'很奇怪,我不知道。它將stdout重定向到stdout。你通常以'2>&1'的形式看到它,它將stderr(2)重定向到stdout(1)。 '$?'是最後的退出代碼;如果'grep'匹配,它將爲'0';如果匹配失敗,則爲'0'(或遇到另一個錯誤,如訪問不存在的文件)。 – Amadan
所以我猜測'1&1'是完全沒有意義的......如果它存在與否,不會有所作爲。 – Logan