Подскажите перезаписать файл в эхо
Я пишу в файл, используя простой 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:
2 ответа
Использование 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
>
перенаправление выполняется оболочкой, а не echo
, Фактически, оболочка выполняет перенаправление еще до запуска команды, и по умолчанию оболочка будет перезаписывать любой файл с таким именем, если он существует.
Вы можете предотвратить перезапись оболочкой, если какой-либо файл существует, используя noclobber
опция оболочки:
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
Вы не получите никаких опций, таких как ввод пользовательских данных для перезаписи любого существующего файла, без выполнения каких-либо ручных операций, таких как определение функции и использование ее каждый раз.