作業フォルダから Bash スクリプトを実行します。

作業フォルダから Bash スクリプトを実行します。

スクリプトがあるフォルダーからファイルを実行し、いくつかの構成ファイルを渡し、同じフォルダーにログを出力するスクリプトをBashで実行しました。たとえば、次のような構造になります。

/home/user/application

内部には次のファイルがあります。

script.sh      # this would be the script to launch
executablefile # this would be the file to run, it's called by the script as "./executable", since it's not in $PATH
config.json    # a config file for the executable that is passed by the script using arguments
logfile        # A log file written by the script, redirecting all Standard and Error output to the log file using tee

したがって、CDをフォルダに挿入してスクリプトを実行すると、すべてがうまくいきます。ただし、別の場所でこのスクリプトを呼び出すと実行可能ファイルが見つからず、構成を検索して呼び出された場所からログファイルを出力する可能性があります。これは私が望むものではありません。

では、shスクリプトにどのような変更を加えることができますか?スクリプトの起動時にスクリプトディレクトリを作業ディレクトリとして作成するには?

私の主なアイデアは、後でこのスクリプトを呼び出すシステムサービスファイルを作成することです。

ありがとうございます。

ベストアンサー1

次の2つのことができます。

  1. スクリプトでは絶対パスを使用します。つまり、

    ./executablefile
    

    到着

    /home/user/application/executablefile
    
  2. スクリプトの実行時に作業ディレクトリを設定します。ユニットにしたいと言われましたsystemd。この場合、サービスセクションは次のようになります。

    [Service]
    Type=forking
    ExecStart=/home/user/application/script.sh
    WorkingDirectory=/home/user/application
    

また、起動スクリプトで実行する操作はsystemdで実行できることがよくあります。環境変数chrtや依存関係などの操作を構成で実行できるため、systemd起動スクリプトは必要ありません。

また、通常は実行可能ファイルをに移動し/usr/local/bin、ログファイルに書き込み可能なスペースを残し、/varjsonをまたは/etcに移動する~/.configことをお勧めします。をコンパイルする場合は、コマンドライン引数を使用して名前をexecutablefile付けることをお勧めします。logfileetcfile

おすすめ記事