纏鬥Git Bash

閱讀時間約 11 分鐘
一直以來都是靠手動的方式來進行檔案的版本管理,也就是自己複製檔案,然後改檔名,加入可以識別的編號。不過,越來越覺得,有必要用版本控制系統來幫忙,因為手動的方式實在很累人,而且當需要查找以前更動的內容時,非常沒有效率。當發現Spyder也有支援Git時,就想著:「好吧!那就試用看看好了。」
Git是相當多人使用的版本控制系統,本來只適用在Linux/Unix系統,不過現在也有Windows版本。本著盡量不在Windows安裝軟體的精神,先在Anaconda找找看有沒有,如果沒有的話,再來找看看有沒有免安裝版,再沒有的話,才摸摸鼻子用安裝版。
正如所料,Anaconda怎可能會沒有Git這個這麼多人在用的版本控制系統?滑鼠點個幾下,沒花多少時間就裝好了。裝好之後,在開始功能表中,出現了Git Bash圖示,滑鼠點一下,就進入Git系統,不過……是命令列介面,圖形化介面還得再下指令啟動。
命令列介面就命令列介面囉,反正很久很久以前,在沒有Windows的年代,大夥兒還不是Dos命令列介面用得不亦樂乎!再說多動動手、動動腦也可以延緩老化,降低失智的風險,老用圖形化介面,真的會變得比較懶得動腦筋、記憶力下降。
用了幾天之後,開始覺得受不了一件事了:每次打開Git Bash,都會身處/c/Users/username/Documents這個目錄中。這個目錄就是Windows的「文件」資料夾,利用檔案總管一層一層點進去,就是C:\使用者\username\文件。使用Windows時,通常會把個人的檔案放在C碟之外的分割區,也就是把系統和資料區分開來。現在每次打開Git Bash,都得從「文件」資料夾出發,下指令移到放檔案的資料夾,Git才能找到要管理的檔案。雖然說多動動手、多動動腦好處多多,但這種機械性的重複動作,實在沒必要做太多。那怎麼辦呢?有沒有辦法一打開Git Bash,就自動移到想要去的地方呢?
要想改變程式啟動時的啟始位置,第一個想到的辦法,當然就是去改捷徑檔囉。捷徑檔滑鼠右鍵,在「內容」裡頭的「開始位置」填入啟動時想要直接進入的資料夾位置,這樣就大功告成,從此王子和公主就過著幸福快樂的日子。只是……理想是豐滿的,但現實是骨感的,即便是王子和公主,也還是要吃喝拉撒睡柴米油鹽醬醋茶,本來想著是可以達到目的的做法,實測的結果是:無效!
怎會這樣?!爬文吧!網路上應該有答案。
網路上有不少人提到改「開始位置」的做法,看來這方法應該是可行的,可為什麼就偏偏不靈光?
在網路上看了不少討論之後,突然間醒悟到,那些討論有些是針對Linux上的Git,有些是針對Windows上的Git。而針對Windows上的Git的討論,使用的是Git for Windows,而不是由Anaconda所安裝的Git。再仔細看一下捷徑檔「內容」裡頭的「目標」,哇咧!長長一大串,同時用到了好幾個東西,看來是很難從這裡理出個頭緒來了。不過,在這長長一大串後面的幾個字:bash.exe,倒是可以研究一下,因為讓人想到Linux裡頭的bash。
果然!bash.exe就是Linux裡頭的bash。事實上,Git Bash可以看成是同時提供git和bash功能的shell。這可真是柳暗花明又一村,在Linux裡頭的一些招式,應該可以拿來試看看。
啟動bash的時候,會自動先去找看看有沒有.bashrc、.bash_profile、.bash_login這幾個特定的script檔來執行,所以如果把需要的動作寫在裡頭,應該就能達到目的。
找了老半天,沒有就是沒有,完全沒有這幾個檔案的蹤跡。除了找這幾個特定的檔案外,連conda本身的設定檔都打開來看,仍是一無所獲。不過在看profile.d裡頭的檔案內容時,倒是重溫了一下剛接觸shell script程式時,被逗樂了的心情。
跟其他程式一樣,在shell script程式中,也有條件判斷、迴圈等結構。為了要明確指示出結構從程式的哪一行開始,以及到哪一行結束,不同的程式語言,會有不同的標記方式,有用大刮號的;有在結尾加個關鍵字end的,比較特別的是Python,它不太合群,用的是縮排。至於shell script程式,就更不合群了,除了有do… done,還有if… fi、case… esac。
「done」符合英文文法,可以理解,可是「fi」、「esac」?!這啥鬼玩意兒啊?怎會用些這麼莫名奇妙的字?要用也用比較有意義好記的字,if… end或if… end if;case… end或case… end case,怎都比if… fi、case… esac要容易記。瞪著這些詭異的字眼,突然間,被逗樂了。原來,那並不是什麼詭異的字眼,只不過就是if和case倒過來拼。真虧設計的人想得出來,居然用了個這麼頑皮的方式,來設計充滿高科技硬梆梆感覺的程式語言。有時候真覺得,科技人的心裡頭,其實都住著個頑皮的小男孩。
重溫過往日被逗樂的心情後,繼續想辦法解決問題。
在看profile.d裡頭的檔案內容時,有注意到裡頭用了Windows的環境變數。直接去改Windows的環境變數,應該也可以達到目的。不過,這決不是個好主意,畢竟那是所有應用程式都可能會用到的東西,影響範圍會有多大,實在是沒法知道。
看來只好自己寫shell script了,反正就只是要移動到不同的目錄而已,應該可以很快搞定。
說來無奈,每次只要覺得很簡單很快可以搞定的事情,往往到最後會搞得頭昏腦脹,費盡九牛二虎之力才完成,不禁讓人懷疑,老天爺似乎特別喜歡捉弄太過志得意滿的人。不到一分鐘.bashrc這個shell script就寫好了,就一行程式而已。然後……失敗!沒用!
真的是讓人傻眼,就只有一行程式而已,怎麼會失敗?改用手動執行看看,還是不行。把寫在script裡頭的程式,直接在Git Bash中輸入執行,一點問題都沒有,可以成功移動到想要的目錄去。所以,程式本身沒問題,是其他地方出了問題。這時候,就只能上網找答案了。不過,既然知道現在面對的是bash,那關鍵字就不要用Git Bash,而改用bash。
原來,在執行shell script的時候,會在原本的shell之外,另外開啟subshell去執行。等執行完之後,關閉subshell,然後回到原來的shell,落葉歸根的在原來的shell結束工作。既然最後會回到原來的shell,而原來的shell一直都沒離開原來的位置,所以中間不管subshell溜到哪個目錄去,結果還是會回到原來的目錄。要避免這種狀況,執行shell script的時候,要用source這個指令,或者偷懶用句點「.」代替也可以,這樣shell script就會在原來的shell執行,而不是丟到subshell去執行。既然是在原來的shell執行,所以當shell script裡頭的指令要求移動到其他目錄去的時候,是原來的shell真的移動到那裡去,最後當執行完shell script的工作後,就會拋開一切留在那裡,不會再跑回原來的地方。所以原來執行.bashrc時,下的指令是./.bashrc,現在只要改成source .bashrc,或. .bashrc就可以了。
手動執行測試看看,真的可以耶!哈!總算搞定了!不過為了要能夠自動執行,還得多動些手腳,把原本的.bashrc檔,改寫成兩個檔案。改寫後的兩個檔案,一個是.bashrc檔,裡頭的程式只有一行,就是用source去執行另一個檔案;而另一個檔案,裡頭的程式,就是要移動到其他目錄的指令。
寫兩個只有一行程式的檔案,這種簡單的工作,不到一分鐘就搞定,然後……都說老天爺喜歡捉弄人,然後又是失敗!
天啊!又是哪裡有問題?啟動bash時,不是應該會自動去執行.bashrc這個檔案嗎?怎麼會不行?在裡頭加一行程式,印出些東西,這樣就知道啟動時有沒有執行了。
啟動Git Bash時,居然沒去執行.bashrc檔,啥狀況?
咦?!測試的過程中,曾經為了回到開啟Git Bash時所在的位置,也就是home directory,直接下了指令cd ~,用「~」來取代長長的一串路徑字串,結果到達的目錄是/c/Users/username,而不是/c/Users/username/Documents。換句話說,home directory是/c/Users/username,而不是開啟Git Bash時所在的/c/Users/username/Documents。原來如此!難怪沒自動執行.bashrc檔。
把.bashrc檔移到/c/Users/username之後,邊想著這下總該沒問題了,邊重新啟動Git Bash,然後……是的,又再一次的然後。不過這次成功了,只是有幾行警告文字出現,說是設定有問題,找不到.bash_profile、.bash_login、.profile其中任何一個檔案,然後很貼心地幫忙造出.bash_profile這個檔案,並把.bashrc的內容放進去。呃……印象中在捷徑檔「內容」裡頭的「目標」那一欄,裡頭長長一大串字的最後,有著bash.exe --login幾個字。啟動bash時,如果有給login這個選項,會去找那三個檔案來執行;如果沒有給login這個選項,才會去執行.bashrc檔。所以說,開啟Git Bash時,會去自動執行的,不是.bashrc,把檔名改成.bash_profile就可以了。
或許是被老天爺作弄好幾次之後,不再信心十足覺得一定沒問題,老天爺認為孺子可教,不再作弄人;也或許是老天爺玩夠了,這一次,總算成功了,王子與公主終於可以過著幸福快樂的生活了。
就在開始動筆寫這篇隨筆前,赫然發現,老天爺其實還是挺照顧人的。怎麼說呢?先前發現檔案放錯地方時,只把後來改成.bash_profile的.bashrc移到home directory,也就是/c/Users/username,而把另一個檔案仍放在/c/Users/username/Documents。如果那時候把兩個檔案都移到home directory,那就會出問題,然後又是一段艱苦的奮鬥旅程。至於為什麼這樣會出問題呢?推測可能的原因,應該是啟動Git Bash後,即使沒有.bash_profile這個檔案,也會執行一堆設定好的指令,裡頭一定包括移動到/c/Users/username/Documents去。現在有.bash_profile這個檔案也要執行,那就等所有指令都執行完後再來執行。也就是說,執行.bash_profile時,所在的位置是在/c/Users/username/Documents。另一個檔案如果不是放在這裡,會找不到而出錯。至於是不是真的是這個樣子,實在是沒力氣去深究了。話說回來,即使想深究,也不知從何找起,畢竟是透過Anaconda安裝在Windows上,檔案和目錄擺放的位置跟在Linux系統上不太一樣。這場和Git Bash的較量,應該就在這兒打住,或許哪天因緣巧合之下,答案會出現也說不定。
Git Bash還真是難纏啊!
即將進入廣告,捲動後可繼續閱讀
為什麼會看到廣告
avatar-img
15會員
129內容數
寫點東西自娛娛人
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
ysf的沙龍 的其他內容
看到了一段程式碼,一段乍看之下覺得挺詭異,懷疑是不是寫錯,但搞清楚之後卻拍案叫絕,冷靜下來後卻覺得這樣寫不怎麼好的程式碼。
寫程式最怕碰到的,就是信心滿滿地寫好程式後,發現結果不如預期,而且完全看不出問題出在哪裡。這種慘況可以分成兩種:一種是程式很長、很複雜,想要把心機很重,躲在幽暗深處的臭蟲給抓出來,即使有功能強大的除錯工具,都不是件簡單的事;另一種是程式沒幾行,一切看起來都很清楚正常,臭蟲根本沒地方躲藏,可是結果就是
解決了Spyder和turtle之間的不合後,就來畫些漂亮迷人的fractal圖案,也順便練習一下recursive function的寫法。
龜兔賽跑,第一回合兔子因為太輕敵,在半路上呼呼大睡睡過頭,輸了比賽。 雖然輸了第一回合的比賽,不過兔子並沒有灰心喪志,牠記取教訓,買了個功能齊全的運動手錶來戴,睡覺前先定好鬧鐘時間,這樣就不怕睡過頭而輸了比賽。從此龜兔賽跑,兔子照樣在半路上睡覺補充體力,但再也沒有因為睡過頭而輸了比賽。
「學程式,數學要很好嗎?」這問題的答案其實很簡單,就是:Yes and no。
「天啊!這程式怎麼這麼醜!」瞪著螢幕上先前寫的程式,不禁從心底冒出這樣的一句話。
看到了一段程式碼,一段乍看之下覺得挺詭異,懷疑是不是寫錯,但搞清楚之後卻拍案叫絕,冷靜下來後卻覺得這樣寫不怎麼好的程式碼。
寫程式最怕碰到的,就是信心滿滿地寫好程式後,發現結果不如預期,而且完全看不出問題出在哪裡。這種慘況可以分成兩種:一種是程式很長、很複雜,想要把心機很重,躲在幽暗深處的臭蟲給抓出來,即使有功能強大的除錯工具,都不是件簡單的事;另一種是程式沒幾行,一切看起來都很清楚正常,臭蟲根本沒地方躲藏,可是結果就是
解決了Spyder和turtle之間的不合後,就來畫些漂亮迷人的fractal圖案,也順便練習一下recursive function的寫法。
龜兔賽跑,第一回合兔子因為太輕敵,在半路上呼呼大睡睡過頭,輸了比賽。 雖然輸了第一回合的比賽,不過兔子並沒有灰心喪志,牠記取教訓,買了個功能齊全的運動手錶來戴,睡覺前先定好鬧鐘時間,這樣就不怕睡過頭而輸了比賽。從此龜兔賽跑,兔子照樣在半路上睡覺補充體力,但再也沒有因為睡過頭而輸了比賽。
「學程式,數學要很好嗎?」這問題的答案其實很簡單,就是:Yes and no。
「天啊!這程式怎麼這麼醜!」瞪著螢幕上先前寫的程式,不禁從心底冒出這樣的一句話。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
美國財政部21日公布一項法規命令的草案,禁止或要求在中國投資對人工智慧與其他特定技術領域可能威脅美國國家安全的進行通報。拜美中貿易戰之賜,日本終於可能走出「失落的30年」,可預見日本經濟終將再起! 從美日貿易戰的歷史來看,美中貿易戰,很可能不是十年(decade),而可能是幾十年(decades)!
Thumbnail
因為和男友常常分享想去的餐廳,卻總是分享後就忘了自己分享過什麼,後來我們在IG上開了一個共享資料夾,存放分享過的貼文。 今天中午吃完麻辣鍋,到河濱公園散散步後,覺得是個吃下午茶的心情。男友說之前好像看到在仁愛公園附近有一間下午茶店。多虧了這個共享資料夾,我很快的找到了鬧蟬烘豆工作室。(題外話,剛剛
Thumbnail
下塔悠金玉禪寺的斗姆,又稱九天聖母、九天娘娘,是道教中的護法神祇,也是民間信仰的重要神祇。斗姆的形象為身穿九色天衣、頭戴九龍寶冠、手持寶劍、腳踏蓮花的威嚴女神。 斗姆在道教中的地位崇高,是道教三十六天君之一。斗姆掌管北斗七星,是天界的女戰神,具有降妖伏魔、消災解厄、賜福保平安等神力。斗
Thumbnail
#今日小禪意 學會發現每天生活的小美好,小確幸。 ✍ 愛我所畫,夢我所愛 圖。文/布恣芽朵
Thumbnail
這篇文章討論了波克夏與指數型基金的表現比較,特別聚焦在波克夏持有蘋果股票對其績效的影響,並提到了臺積電對0050表現的影響。文章強調了主動投資的優勢,同時也提到了對於臺積電未來績效的判斷挑戰。
Thumbnail
來一碗熱騰騰、暖入心脾豆漿粥,度過暖洋洋的冬日 🫘❄️
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
美國財政部21日公布一項法規命令的草案,禁止或要求在中國投資對人工智慧與其他特定技術領域可能威脅美國國家安全的進行通報。拜美中貿易戰之賜,日本終於可能走出「失落的30年」,可預見日本經濟終將再起! 從美日貿易戰的歷史來看,美中貿易戰,很可能不是十年(decade),而可能是幾十年(decades)!
Thumbnail
因為和男友常常分享想去的餐廳,卻總是分享後就忘了自己分享過什麼,後來我們在IG上開了一個共享資料夾,存放分享過的貼文。 今天中午吃完麻辣鍋,到河濱公園散散步後,覺得是個吃下午茶的心情。男友說之前好像看到在仁愛公園附近有一間下午茶店。多虧了這個共享資料夾,我很快的找到了鬧蟬烘豆工作室。(題外話,剛剛
Thumbnail
下塔悠金玉禪寺的斗姆,又稱九天聖母、九天娘娘,是道教中的護法神祇,也是民間信仰的重要神祇。斗姆的形象為身穿九色天衣、頭戴九龍寶冠、手持寶劍、腳踏蓮花的威嚴女神。 斗姆在道教中的地位崇高,是道教三十六天君之一。斗姆掌管北斗七星,是天界的女戰神,具有降妖伏魔、消災解厄、賜福保平安等神力。斗
Thumbnail
#今日小禪意 學會發現每天生活的小美好,小確幸。 ✍ 愛我所畫,夢我所愛 圖。文/布恣芽朵
Thumbnail
這篇文章討論了波克夏與指數型基金的表現比較,特別聚焦在波克夏持有蘋果股票對其績效的影響,並提到了臺積電對0050表現的影響。文章強調了主動投資的優勢,同時也提到了對於臺積電未來績效的判斷挑戰。
Thumbnail
來一碗熱騰騰、暖入心脾豆漿粥,度過暖洋洋的冬日 🫘❄️