• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:シェルスクリプト ファイルパス違いによって実行結果が違う 比較)

シェルスクリプトファイルパス違いによって実行結果が異なる比較

このQ&Aのポイント
  • シェルスクリプトを作成し、指定したファイルパスの違いによって実行結果が異なる問題について質問しています。
  • ファイルパスがホームディレクトリに配置されている場合は正常に実行できますが、一時ディレクトリに配置するとエラーが発生し実行できません。
  • なぜファイルパスの違いで実行結果が異なるのか、エラーの原因は何かを知りたいとのことです。

質問者が選んだベストアンサー

  • ベストアンサー
  • maku_x
  • ベストアンサー率44% (164/371)
回答No.1

bash などの sh 系のシェルは、 > set FILEA=/tmp/TEST/fileA.txt > set FILEB=/tmp/TEST/fileB.txt と書くと、 set [--abefhkmnptuvxBCHP] [-o option] [arg ...] オプション無しの場合は、シェル変数全ての名前と値の組が表示されます。表示は、入力として再利用できるフォーマッ トで行われます。出力は現在のロケールに従ってソートされます。オプションが指定されている場合、 オプションはシェルの属性を設定または解除します。オプションが処理された後に残っている引き数があれば、 これは位置パラメータの値として扱われ、 $1,$2, ... $n の順に代入されます。 と言うことですから、シェル変数 FILEA, FILEB には値は入らないことになります。ちなみに、 > set FILEA=/tmp/TEST/fileA.txt > set FILEB=/tmp/TEST/fileB.txt > echo "$1, $2" を実行すると、 FILEA=/tmp/TEST/fileA.txt, FILEB=/tmp/TEST/fileB.txt と表示されてしまいます。 ※ set の意味が、csh、tcsh とはまるで違いますので、両者使われている場合は、ご注意を。

bob33
質問者

補足

ご回答ありがとうございます。シェル変数の中身まで確認すべきでした。シェルによる違い・・・まだまだ勉強すべき点であると気づかせていただきました、ありがとうございます。 まず、setを付けた理由なのですが、 fileA.txtは、普段使用しないファイルで自分のディレクトリ下に置いておくのは邪魔ですし、また、違うユーザも参照できるように、自分のディレクトリに入れておくのはやめて、/tmpの下に置いておきたいと考えました。 そこでファイルパスを #!/bin/sh FILEA=/home/MyDIR/TEST/fileA.txt から FILEA=/tmp/TEST/fileA.txt      としたのですが、これだとファイルが読めないというエラーが出たため set FILEA=/tmp/TEST/fileA.txt    としました。 これでFILEAにfileA.txtの中身が入ったと思っていたのですが、実際はご指摘されたとおり、=以降のパスが文字列として入っていただけということなんですね。 2つ新たにご質問したいのですが、 i ) /tmpの下にファイルを置いた場合はなぜファイルが読めないというエラーが出るのでしょうか? (←これが一番謎です。) ii) /tmpの下においたファイルを読み込むときにはどのようにシェル変数を設定すればいいのでしょうか? setのオプションを見ても適切なものがないように思いますので。 よろしくお願いいたします。