Bash
在 Linux Mint 中啟動時執行 bash 腳本並自動打開 mate-terminal
我是 Linux 新手,所以不知道如何做我想做的事。
我有
my_script.sh
(當然是可執行的)這樣的:#!/usr/bin/env bash mate-terminal -e "bash -c 'cd /home/my_user/ruby_projects/my_app/';'rails s';exec $SHELL"
**注意:**此腳本應打開終端,將目前目錄更改為該終端中的給定目錄,在不關閉終端的情況下啟動 rails 應用程序。所有這些事情都應該在系統自動啟動後完成(現在我手動執行這個腳本)。腳本包含一些類似的命令,因此應該打開一些終端。
如果我打開終端,轉到腳本目錄,執行
./my_script.sh
- 一切正常,完全符合我的要求,但每次啟動時,我都必須手動執行此操作。所以我去了控制中心->啟動應用程序->添加->瀏覽了我的shell腳本,給了名字->添加
之後我重新啟動系統並… :( 我看到的一切都是在螢幕上閃爍幾下(即配對終端的打開和關閉) - 一切都發生得如此之快,以至於我看不到它顯示的內容(但是,所有終端都應保持打開狀態!)。當然,沒有啟動任何 Rails 應用程序。所有終端都已關閉。如何解決這個問題?
更新:起初我的想法是並非所有 Rails 應用程序所需的程序都已啟動,這就是終端簡單關閉的原因,所以我嘗試 ty add
sleep 10
讓腳本等到一切正常啟動,但這沒有改變 - 閃爍只是延遲了10 秒。
經過一天的掙扎,我終於得到了我需要的更好的東西:
#!/bin/bash # Adds RVM to needed paths to start servers with needed Ruby version PATH=$PATH:$HOME/.rvm/bin [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # I need this server to run in background startLocalRedmineServer()( cd /home/adminuser/ruby_projects/redmine/ rails server webrick -e production --port 3001 ) # I need this to be done in background also proxyLocalRedmineServer()( proxylocal 3001 --host=mylocalredmine ) # This thing should open mate-terminal, run start server, so that I can see real time logs, and stay on the screen in case I need it to be restarted startOtherLocalServer()( mate-terminal -e "bash -c 'cd /home/adminuser/ruby_projects/project_abc/';'rails s';'exec /bin/bash'" ) # This thing should open mate-terminal and start proxying + remain opened proxyOther()( mate-terminal -e "bash -c 'proxylocal 3000 --host=projectabc'; 'exec /bin/bash'" ) startLocalRedmineServer & proxyLocalRedmineServer & startOtherLocalServer & proxyOther & wait
正如我在上面的問題中所寫的那樣,為啟動添加了這個腳本。系統啟動後,此腳本會添加缺少的新路徑,然後啟動 4 個單獨的子程序。其中兩個 - 即 Redmine 伺服器及其代理 - 在後台工作(我不需要停止它們或在那裡改變任何東西)。另外兩個功能打開單獨的終端,啟動本地 Rails 伺服器並代理它,以便我可以在需要時停止它或重新啟動它。