Подскажите перезаписать файл в эхо

Я пишу в файл, используя простой 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:
4
задан 9 May 2016 в 08:30

2 ответа

> перенаправление сделано оболочкой, не 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

Вы не заставите опции как взятие ввода данных пользователем перезаписывать любой существующий файл, не делая чего-то ручного как определение функции и использовать его каждый раз.

0
ответ дан 9 May 2016 в 18:30
  • 1
    С 17,04 я мог даже посмотреть ролики YouTube в прекрасном HD. Теперь в 17,10 все отстает. Я don' t знают почему хотя – GorillaApe 28 October 2017 в 05:54

Использовать 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
2
ответ дан 9 May 2016 в 18:30
  • 1
    Надо надеяться, это - просто ошибка и будет разработано. На данный момент не наличие 3D ускорения работает на меня, но это было еще хуже прежде – ymmyk 28 October 2017 в 11:00

Другие вопросы по тегам:

Похожие вопросы: