2014-09-05 189 views
2

我找劇本與詹金斯運行Appium時讀一些下面的腳本#!/斌/慶典--login VS#!/斌/慶典

#!/bin/bash --login 

killall -9 "iPhone Simulator" &> /dev/null 
killall -9 node &> /dev/null 
killall -9 instruments &> /dev/null 
... 

我不明白爲什麼的第一行腳本需要在這裏通過--login選項。我已閱讀手冊頁,但仍有一些混淆。

我從手冊頁得到的是通過--login使腳本被調用爲login shell而不是interactive shell。 interactive shell是用戶可以與shell進行交互的shell,就像使用鍵盤輸入內容一樣。但是什麼是login shell?我查看了手冊頁,它說login shell會加載~/.bash_profile,但是如果通過Mac OSX的Terminal.app打開終端,它也會加載~/.bash_profile,我可以與shell進行交互,對吧?那麼,我打開的外殼是login shellinteractive shell

+0

是的,一個shell既可以是「登錄」也可以是「交互式」shell。不,事實上'.bash_profile'被讀取並不一定意味着這一點。大多數人不明白shell init的工作方式,所以從一組init文件到另一個init文件的鏈接都是這樣,所以不管是什麼類型的shell都加載了這些東西(這是許多發行版的默認配置,甚至是)。 – 2014-09-05 02:28:49

+0

我會向供應商提出支持問題。我看不出用這個腳本做這件事的好理由。任何需要的東西都應該導出或專門設置。依賴用戶在第三方產品中的啓動文件需要麻煩,並且是不必要的開銷。我懷疑這是無意的。 – cdarke 2014-09-05 05:58:30

回答

2

主要區別在於登錄shell在啓動時執行您的配置文件。從手冊頁:

當bash是作爲交互的登錄shell,或者是一個非交互的shell與--login選項,它首先讀取和 從文件/ etc/profile文件執行命令,如果該文件存在。讀取該文件後,它會按照該順序查找〜/ .bash_profile, 〜/ .bash_login和〜/ .profile,並從第一個存在並讀取的第一個中讀取和執行命令。 當shell開始禁止這種行爲時,可以使用--noprofile選項。

當登錄shell退出時,bash會從〜/ .bash_logout文件中讀取並執行命令(如果存在)。

+0

所以'login shell'就是shell,它首先加載〜/ .bash_profile,〜/ .bash_login和〜/ .profile,然後執行你的腳本吧? – bufferoverflow76 2014-09-05 06:12:31

+0

是的。該腳本可能會使用該選項,以便它可以獲取您在配置文件中設置的諸如PATH之類的設置。 – Barmar 2014-09-05 06:41:18