echo.shという単純なbashスクリプトを作成しました。文字列を出力します。実行可能であることを確認しました。その後、GUIインターフェースを介して「Launch Application」プログラムに追加しました。ところで、コンピュータを再起動しても端末にエコーが表示されず、実行されないようです。
私の理解によると、STDOUTはターミナルファイルなので、スクリプトが実行されたときにターミナルを自動的に開かないでください。ただし、端末から直接スクリプトを実行すると、スクリプトは正常に動作します。
エコファイル
#!/bin/bash
echo "hello this is a bash script talking"
実行可能にする
chmod +x echo.sh
「正しいファイルディレクトリでアプリケーションを起動する」に追加
結果
しかし、システムを再起動すると、スクリプトは期待どおりに実行されず、端末にエコーメッセージが表示されません。理由がわからない。ポイントを完全に逃した可能性があります。もしそうなら教えてください。
参考までに、「Startup Application」プログラムにある「cleanup.sh」スクリプトなど、他のすべてのbashスクリプトも機能します。
修正しよう
STDOUTをターミナルファイル/ dev / ttyにリダイレクトしようとしました。しかし、これはうまくいかないようです。
#!/bin/bash
echo "hello this is a bash script talking" >/dev/tty
また、問題のあるものがechoコマンドであることを確認するために、単純なrmコマンドを使用してbashスクリプトをテストしました。ただし、起動アプリケーションまたは.bashrcファイルに追加すると、スクリプトと同じディレクトリにあるtest.txtは削除されません。ただし、端末で手動で実行すると機能します。
#!/bin/bash
rm ./test.txt
また、Firefoxコマンドを使用してFirefoxを開くだけでアプリケーション自体の実行をテストしました。問題なく動作します。では、アプリ自体の実行には問題がないようですが?
答え1
スクリプトは機能できますが、スクリプトのSTDOUT(出力が渡される場所に関係なく)は、次のように起動スクリプトの実行に関連するオペレーティングシステムのプロセスにリンクされています。端末ですが、カーネルプロセスなどではユーザーに隠されます。このメッセージが表示された端末を開くには、おそらく次のように編集する必要があります。
#!/bin/bash
gnome-terminal -e 'echo "hello this is a bash script talking"'
(私は今Ubuntuを使用していないのでこれをテストすることはできませんが、要点はこのメッセージが表示されることを望む端末を明示的に開くことです)
答え2
作成した自動起動ファイルの設定ファイルを確認できます。
cat ~/.config/autostart/NAME.desktop
端末でスクリプトを実行するには、
Terminal=true
このファイルに追加する必要があります。達成したい目標に応じて設定する
こともできます。Hidden=false
答え3
最も簡単な方法は、以下のようにcrontabを使用することです。
crontab -e
コントラブファイルの末尾にスクリプトを追加します。
#
@reboot /path-to-your-script/your-script-name.sh
その後、再起動して変更を観察します。
答え4
/bin/bash -c
前に追加する必要があります。'/path/to/your/script.sh'
/bin/bash -c '/path/to/your/script.sh'
コマンドecho
出力は端末ではなくシステムログに表示されます。
journalctl -b
システム起動ログの出力、つまりスクリプト実行時の出力が表示されます。