2016-03-01 34 views
0

我使用screen在Linux機器上,而我試圖寫它在完成後自動關閉一個新的,獨立的屏幕會話中運行一個bash功能的(相當便攜)功能。我已經取得了一些成功,但我注意到以下行爲:發送猛砸別名來分離屏幕會話

如果我包括我的~/.bashrc文件中的mail_submit()定義,我可以運行

mail_submit foo 
在終端

,而且我可以訪問別名在一個新的屏幕會話:

screen -S test 
    mail_submit foo 

然而,下面的命令不起作用

screen -d -m -S test sh -c 'mail_submit foo' 

可能是因爲sh -c啓動了一個不知道我的~/.bashrc配置文件的新殼。所以,我可以使用下面的解決辦法:

screen -d -m -S test sh -c 'source ~/.bashrc; mail_submit foo' 

工作。

但是,如果我想換這個功能成一個bash別名(這是我在這裏的最終目標),這將導致一個奇怪的自我指涉的情況。

問題:什麼是讓sh -c知道我的~/.bashrc配置文件位置的簡單方法,或者使用源文件和創建別名的變體?

編輯:我救不了shell腳本在我的主目錄,並創建運行

screen -d -m -S test bash -c '~/mail_submit.sh $1' 

的別名,但我還是會好奇地聽到其他可能的修復。

回答

2

默認~/.bashrc包含此([[ "$-" != *i* ]] && return)頂部(或上部其他地方)的一小段代碼。如果bash shell沒有以交互模式運行,此行將阻止~/.bashrc來自beeing sourced。

,你可以:

  1. 刪除此行
  2. 創建一個新的文件,該文件將只包含你需要的別名,來源,
  3. 創建一個小的bash腳本,而不是一個別名和運行
2

你的意思screen -d -m -S test bash -c 'mail_submit foo'? 它看起來像你想運行與外殼(SH)的命令,而不是稱作Bourne Again shell(bash)的,這是命令解釋程序實際上讀取~/.bashrc輪廓。

編輯:.bashrc文件沒有被默認的來源,因爲屏幕不會創建bash進程作爲登錄shell,當讀.bashrc文件是。創建.screenrc文件與線defshell -bash將創建bash進程作爲登錄shell來代替,然後將調用.bashrc文件。

+0

好抓;不幸的是這個問題依然存在,並且當我明確地給出'〜/ .bashrc'時也是如此。 – chriswhite

+0

嘗試使用'defshell -bash'設置〜/ .screenrc文件,這使得bash作爲登錄shell運行,它將調用〜./。bashrc文件,因爲默認情況下,屏幕不會運行bash作爲登錄shell(讀取.bashrc文件時)。有關更多信息,請參閱此帖子:https://bbs.archlinux.org/viewtopic.php?id = 82519 – Incognito