crontabを介して実行されるbashスクリプトで$(pwd)を使用する方法は?

crontabを介して実行されるbashスクリプトで$(pwd)を使用する方法は?

Run_at_startup.sh次の行を含むスクリプトがあります。

/bin/bash "$(pwd)/Testing_3.sh"

手動で実行するとよくRun_at_startup.sh出ますねTesting_3.sh。ただし、Run_at_startup.sh実行するcrontabTesting_3.sh実行されません。明らかにそれが問題です$(pwd)。それでは、$(pwd)実行しているスクリプトでは使用できませんかcrontab?それでは、代わりに何を使用できますか$(pwd)

ベストアンサー1

これを呼び出したプロセスの現在の作業ディレクトリにあるスクリプトを実行するには./that-script

"$(pwd)/that-script"POSIXのようなシェル(cronコマンドラインを解析するにはPOSIXのようなシェルを呼び出す必要があります)では、追加のプロセスを実行する必要があり、ストリッピングの"$PWD/that-script"ために悪いです。$(...)みんな$PWD後行改行。したがって、現在の作業ディレクトリへの保存されたパスが改行で終わっても機能しません。

./that-script"$PWD/that-script"(以下に拡張予定)の違い/path/to/working/directory/that-scriptは、前者は相対パスであり、後者は絶対パスであることです。どちらの場合も、that-scriptコマンドラインを呼び出したシェルプロセスの現在の作業ディレクトリにない場合は失敗します。cron

デフォルトでは、タスクはcrontab通常ホームディレクトリから開始されます。

そのディレクトリにない場合はthat-scriptを使用してください/actual/path/to/that-script。スクリプトが現在の作業ディレクトリで実行されているかどうかも重要であるため、/actual/path/to次のことができます。

cd /actual/path/to && ./that-script

または:

cd /actual/path/to && "$PWD/that-script"

実行する場合は、that-script両方のanother-scriptスクリプトが同じディレクトリにあります。通常、$0in値からディレクトリを派生できますother-script

たとえば、スクリプトother-scriptの場合zsh:

bash -- $0:h/that-script

そうではなく、$0改行で終わらないと仮定すると、次のようになります。

bash -- "$(dirname -- "$0")/that-script"

ディレクトリ名は$0相対パスにすることができます。絶対パスにするには、zshで次のようにします。

bash -- $0:P:h/that-script

その他のシェル:

dir=$(CDPATH= cd -P -- "$(dirname -- "$0")" && pwd -P) || exit
bash -- "$dir/that-script"

おすすめ記事