助け合いフォーラム
この問題はプレミアムコンテンツです。
エラーにならない場合というのはどういう状態なのか?
解説に「「date > backup」の行が実行されますが、ディレクトリに対してリダイレクトによる書き込みを行う事になるため、エラーとなります。」とあります。
この場合、どういう状態ならエラーにならないのでしょうか?
ご教示のほどよろしく願いいたします。
backup がディレクトリではなくファイル(かつ書き込み可能)ならエラーになりません。
問題文でls -l
の結果が
drwxr-xr-x. (…中略…) backup
のようになっていますが、先頭の文字がd であることからbackup がディレクトリであることに気づくことが必要です。
もし
-rwxr-xr-x. (…中略…) backup
のように先頭の文字が-になっていればbackup はディレクトリではなく通常ファイルなので、あとはスクリプトを実行したユーザーにこのファイルへの書き込み権があればエラーになりません。
コメント
リダイレクト先に"backup"が指定されているため、
エラーになっています。
$ls -l の実行結果からわかるようにbashスクリプト"backup.sh"以外に同じ階層には
"backup"というディレクトリが存在しています。
(蛇足かもしれませんがdrwxr-xr-x の部分でdから開始していることからbackupはファイルではなく、ディレクトリです。)
もしも"backup"がファイルであればリダイレクトにより書き込みが出来てエラーにはならなかったはずですが
(catが実行できているためbashを実行しているのはstaffユーザとみられるため)、
前述の通り、ディレクトリなので書き込みは出来ません。
恐らくエラーメッセージの内容はこんな感じだと思います↓
-bash: backup: Is a directory
以上より「どうすればエラーにならないのか」ですが、
リダイレクト先に"backup"という名称を避けたファイルを指定すれば良いと思われます。
それによってリダイレクトの指定先がディレクトリであることに起因するエラーを回避出来ます。
■■■■■■■■■■■■■
#!/bin/bash
if test -e backup; then
date > (※ここでbackup以外の文字列を指定する)
fi
■■■■■■■■■■■■■
ご参考となれば幸いです。
コメント
この投稿に対して返信しませんか?
j jeronimmo521
2023/04/29 03:57
ご回答ありがとうございます。 詳細な解説でとてもよくわかりました。