単純なecho
を使用してファイルに書き込みます(他の方法を使用することもできます)。
既に存在するファイルに書き込む場合、ユーザーに上書きするかどうかを確認するエコーを作成できますか?
たとえば、多分-i
のような引数が機能しますか?
echo -i "new text" > existing_file.txt
そして、望ましい結果は、ユーザーに上書きするかどうかを促すことです...
echo -i "new text" > existing_file.txt
Do you wish to overwrite 'existing_file.txt'? y or n:
>
リダイレクトは、echo
ではなく、シェルによって行われます。実際、シェルはコマンドが開始される前にリダイレクトを実行し、デフォルトではシェルは存在する場合はその名前でファイルを上書きします。
noclobber
Shellオプションを使用すると、ファイルが存在する場合にシェルによる上書きを防ぐことができます。
set -o noclobber
例:
$ echo "new text" > existing_file.txt
$ set -o noclobber
$ echo "another text" > existing_file.txt
bash: existing_file.txt: cannot overwrite existing file
オプションの設定を解除するには:
set +o noclobber
関数を定義して毎回使用するなどの手動操作を行わずに、ユーザー入力を使用して既存のファイルを上書きするなどのオプションはありません。
test
コマンド(角括弧[
でエイリアスされます)を使用して、ファイルが存在するかどうかを確認します
$ if [ -w testfile ]; then
> echo " Overwrite ? y/n "
> read ANSWER
> case $ANSWER in
> [yY]) echo "new text" > testfile ;;
> [nN]) echo "appending" >> testfile ;;
> esac
> fi
Overwrite ? y/n
y
$ cat testfile
new text
または、それをスクリプトに変換します。
$> ./confirm_overwrite.sh "testfile" "some string"
File exists. Overwrite? y/n
y
$> ./confirm_overwrite.sh "testfile" "some string"
File exists. Overwrite? y/n
n
OK, I won't touch the file
$> rm testfile
$> ./confirm_overwrite.sh "testfile" "some string"
$> cat testfile
some string
$> cat confirm_overwrite.sh
if [ -w "$1" ]; then
# File exists and write permission granted to user
# show Prompt
echo "File exists. Overwrite? y/n"
read ANSWER
case $ANSWER in
[yY] ) echo "$2" > testfile ;;
[nN] ) echo "OK, I won't touch the file" ;;
esac
else
# file doesn't exist or no write permission granted
# will fail if no permission to write granted
echo "$2" > "$1"
fi