シェルスクリプトのcdコマンドで相対アドレスを指定する方法を教えて下さい。


現在、SHの中身で
WORKDIR= /virtual/・・省略・・/files/csv/test1/
というフォルダを指定していますが、このSHをCRONに登録したところエラーで「No such file or directory」と出るので、相対パスで指定したいと思います。

このシェルスクリプトtest.shの格納場所が
/virtual/・・省略・・/files/cgi/test.sh
である場合、WORKDIR
/virtual/・・省略・・/files/csv/test1/
はどのように指定したら良いでしょうか?

よろしくご教授下さいませ。

回答の条件
  • 1人5回まで
  • 登録:2009/03/13 16:52:09
  • 終了:2009/03/13 21:22:45

ベストアンサー

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402009/03/13 17:07:01

ポイント60pt
#!/bin/sh
DIR=`dirname $0`
TARGET=$DIR/../csvtest1/
cd $TARGET
pwd

このSHをCRONに登録したところエラーで「No such file or directory」と出る

実際にそのディレクトリは存在するの?

id:ReoReo7

>実際にそのディレクトリは存在するの?

ディレクトリは存在すると思いますが、シェルスクリプト中での指定が

/virtual/ユーザID/・・・で始まるものを指定して良いものか、良く分かりません。

そのため相対パスにしようと思いました。

追記:

エラーです。

/・・省略・・/files/cgi/check.sh: line 2: /../csv/test1/: No such file or directory

2009/03/13 17:49:42
  • id:ReoReo7
    ちなみに、エラー箇所は
    cd $WORKDIR
    で、エラーコードは
    /virtual/・・省略・・/files/cgi/check.sh: line 7: cd: /virtual/・・省略・・/files/csv/test1/
    : No such file or directory
    です。
  • id:standard_one
    基底が変わってるだけじゃないの?
  • id:ReoReo7
    基底とは何でしょう。
  • id:Mook
    相対指定ではうまくいかないので、絶対指定にするというのは聞きますが、
    逆はあまり聞きません。

    スクリプトが実行されるときの基底(Base)パスは、スクリプトの位置ではなく
    実行ユーザのホームディレクトリになるケースもあるので、そのあたりを確認しては
    どうでしょうか。

    Cron でスクリプトを実行する場合、環境設定が異なることがあるので、そのあたりに
    左右されないよう書く必要があります。
  • id:ReoReo7
    ありがとうございます。

    初めてサーバー言語(?)というものに触りましたが、いろいろとあるのですね。
    現在、実行ユーザのホームディレクトリをベースとして記述し、テストしているところです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません