シェルスクリプトを書いていて”cannot create ~/dir/file Directory nonexistent”というエラーがでました。原因は単純でしたがメモしておきます。
!<--more-->
環境
Ubuntu 16.04 LTS
スクリプト例
第一引数に与えたディレクトリ下のファイルリストを取得してDropboxに保存するスクリプトファイル。
#! /bin/sh dir="~/Dropbox/log/files/" name="${2}_$(date "+%Y%m%d_%H%M%S").log" echo "Creating ${name} file." if [ "$#" -eq 2 ] then tree -Dsh ${1} >${dir}${name} echo "It was saved in ${dir}${name}" else echo "usage: $0 dir name" fi
実行結果とエラー
実行結果は下の通り。
$ sh foo.sh /mnt/da/ test Creating test_20180203_014232.log file. foo.sh: 20: foo.sh: cannot create ~/Dropbox/log/files/test_20180203_014232.log: Directory nonexistent It was saved in ~/Dropbox/log/files/test_20180203_014232.log
実行結果の2行目に”foo.sh: 20: foo.sh: cannot create ~/Dropbox/log/files/test_20180203_014232.log: Directory nonexistent
“というエラーメッセージが表示されていてファイルの保存ができていません。
原因
原因は保存するディレクトリをホームディレクトリを意味する~(チルダ)を使って指定していたのがまずかったようです。
普段コマンドを打つときは~を使っているので気づきませんでしたが、シェルスクリプトでは控えたほうが良さそうです。
この記事を読んだ人はこんな記事も読んでいます。
【シェルスクリプト】cannot create ~/dir/fileの解決