電子書籍の厳選無料作品が豊富!

お世話になっております。
echo文を使用して変数内に格納された文字列をファイルに追記しようとするとエラーが発生します。

エラーが発生している構文:
echo $add >> $file

エラー内容:
read.sh: line 89: /etc/ntp.conf: そのようなファイルやディレクトリはありません

エラー発生時の変数の中身:
$add → server 192.168.1.1
$file →/etc/ntp.conf

同シェルスクリプト内のほか箇所では、echo文を使用しての追記は正常に行えております。
また、/etc/ntp.confは存在しており、catコマンドで内容の出力ができることを確認できております。

A 回答 (3件)

新規にファイルを作成して、そこへ書き込みたいと言うことでしょうか?



ならば
 echo $add >> $file
ではなく
 echo $add > $file
でOK。
「>>」はファイルに追記する時に使うモノです。

この回答への補足

Cupper-2様
ご回答有難うございます。

既存ファイルに文字列を追加したいと考えております。

補足日時:2013/09/14 21:00
    • good
    • 0

No2さんの指摘も、ありうると思います。

よくユーザー関数にしているとLineデーターが違ってきます。

>、echo文を使用しての追記は正常に

これは、ほとんど意味がありません。

>、/etc/ntp.confは存在しており、catコマンドで内容の出力ができることを

も、チェック事項としては意味を持ちません。何せリダイレクトの指示は、あってもなくてもかまわないからです。なければ新規に作成し、あれば、アペンドします。

その時に問題になるのは、存在していた時に、書き込み権があるかどうかです。また、他のプロセスによって排他制御されていないことです(自身かもしれないが)。

その2つを調べないとだめですよね??????

>catコマンドで内容の出力ができることを

は読み取り実行権だけは、在るようですね。あなは書き込みしたいんですよね。書き込みできるかどうかチェックしないと。

それと、そのスクリプトを実行する実行ユーザーの権限です。書き込みに関しては、その3つ。

話を最初に戻して、そのLineかどうか、確かにecho での問題なのかですが、そうだと思われる箇所の書き換えですよね。echo test >> /tmp/1234

とかに書き換える事ですね。で、それが成功し次に、echo $add >> >> /tmp/1234が成功したら、$add 変数の書き込みは 問題ないようですね。次に /etc/12345 に書き換えたらどうなりますか? それが成功したら $file にしてください。

ちなみに変数は ${file} などと、スクリプトが大きくなれば正当な書き方が必要になります。


そのような試行した記述がないのが全く持って不思議ですね。普通やると思いますが?  何でしょうね。
    • good
    • 0

echo $add >> $file



という文で、

read.sh: line 89: /etc/ntp.conf: そのようなファイルやディレクトリはありません

というエラーは絶対に出ませんので、何か勘違いをされていると思います。もう一度見直してください。別の行では?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!