「cd」の動作中にcronスクリプトで「/usr/bin/cd」を使用できない

「cd」の動作中にcronスクリプトで「/usr/bin/cd」を使用できない

cronを介してスケジュールされたタスクを実行するために使用する簡単なシェルスクリプトがあるので、git pull迅速で汚れたソリューションを選択しました。

とにかく私のスクリプトは次のことを行います。

#!/usr/bin/bash

if /usr/bin/cd /opt/repos/other-teams-repo
then
    echo "success!"
else
    echo "fail :("
    exit 1
fi

/usr/bin/pwd

if /usr/bin/git pull
then
    echo "success on the pull"
else
    echo "fail on the pull"
    exit 1
fi

コマンドラインでは正常に動作します。しかし、cronを介して実行すると、次のようになります。

57 11 * * 1 /opt/myuser/shell/otheruser-repo-git-pull.sh > /opt/log/repo-pull.git.cronlog 2>&1

私のcronlogには次のものが表示されます。

success!
/home/myuser
fatal: Not a git repository (or any parent up to mount point /home)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
fail on the pull

私が変わったとき/usr/bin/cd到着CDそして/usr/bin/パスワード到着パスワードそれは非常にうまく動作します。

誰かがなぜこれができるのかについての洞察力を持っているのだろうか。

ベストアンサー1

作業ディレクトリはプロセスの属性なので、外部バイナリは/usr/bin/cdシェルの作業ディレクトリを変更できません。 (単に自分の作業ディレクトリを変更して終了します。)シェルの組み込みディレクトリが必要ですcd。 。

はい、賢明に」と聞くこともできます。外部コマンドのポイントは何ですかcd

pwd対。には/usr/bin/pwdそのような問題はありません。外部pwdディレクトリがシェルの作業ディレクトリを継承するため、組み込みディレクトリのように印刷できるため(パスにシンボリックリンクが含まれていない限り)。

おすすめ記事