0

たとえば、リリースごとにリリースフォルダにコピーするスクリプトを処理しますrelease/version_0.0.2。また、このバージョン(フォルダrelease/version_0.0.2)へのシンボリックリンクを設定しましたlatest。スクリプトを実行するには、スクリプトが含まれているフォルダーにいる必要があります(相対パスを使用した設計上の不適切な決定)。

私の問題は、このスクリプトのユーザーがほぼ常に最新バージョンを使用したいということです。そこで、彼らはlatest作業ディレクトリに設定し、そこからスクリプトを実行します。ただし、新しいバージョンをリリースすると、古いバージョンが自動的に使用されるため、スクリプト(bashで記述)でユーザーにこの古いバージョンを使用するかどうかを尋ねてください。

私の考えは、スクリプトがから実行されているかどうかを確認することlatestでしたが、シンボリックリンクを変更すると、スクリプトを実行したときに$ PWDが変更されますが、シェルでは変更されません。

次に例を示します。

selnx183:~> cd latest/
selnx183:~/latest> echo $PWD
/home/ejohael/latest
selnx183:~/latest> ps
  PID TTY          TIME CMD
11082 pts/190  00:00:00 tcsh
32527 pts/190  00:00:00 ps
selnx183:~/latest> pwdx 11082
11082: /home/ejohael/release/version_0.0.2
selnx183:~/latest> ./test 
-------------------------------------------------------------------
/home/ejohael/latest
/home/ejohael/latest
/home/ejohael/latest
/home/ejohael/release/version_0.0.2
~/latest

-------------------------------------------------------------------
/home/ejohael/latest
selnx183:~/latest> rm ~/latest
selnx183:~/latest> ln -s ~/release/version_0.0.3/ ~/latest
selnx183:~/latest> echo $PWD
/home/ejohael/latest
selnx183:~/latest> ps
  PID TTY          TIME CMD
11082 pts/190  00:00:00 tcsh
32727 pts/190  00:00:00 ps
selnx183:~/latest> pwdx 11082
11082: /home/ejohael/release/version_0.0.2
selnx183:~/latest> ./test 
-------------------------------------------------------------------
/home/ejohael/release/version_0.0.2
/home/ejohael/release/version_0.0.2
/home/ejohael/release/version_0.0.2
/home/ejohael/release/version_0.0.2
~/release/version_0.0.2

-------------------------------------------------------------------
/home/ejohael/release/version_0.0.2
selnx183:~/latest>

テストは次のようになります。

#!/bin/bash

echo `env` > log

echo "-------------------------------------------------------------------"

echo $PWD
echo `pwd`
echo `cd -L . ; pwd`
echo `cd -P . ; pwd`
echo `dirs`
echo $OLDPWD

echo "-------------------------------------------------------------------"

pushd `dirname -- $0` > /dev/null
echo `pwd -L`
popd > /dev/null

ユーザーに常に最新バージョンを使用するように強制したくはありませんが、ユーザーが最新バージョンを使用していると思ったときに、ユーザーに警告する方法を教えてください。

編集:ユーザーがrelease / version_x.xxから古いバージョンを実行しているときではなく、ユーザーが古い最新のものから実行している場合にのみこれを取得したい

4

2 に答える 2

1

私は次のようなことを考えます

[ $(stat -c%i .) != $(stat -L -c%i ../latest) ] && echo not in the latest directory
于 2012-05-18T11:16:01.880 に答える
0

状況がよくわかりませんが、readlinkコマンドについて知っていますか? を指すreadlink latestファイル/フォルダーの名前を出力します。latestあなたのスクリプトは、何latestを指すべきかを知っています。それからの逸脱は、ユーザーへの警告をトリガーする可能性があります。

于 2012-05-18T12:22:39.693 に答える