В разрешении sed отказано во временном файле - PullRequest
0 голосов
/ 31 января 2019

С sed Я пытаюсь заменить значение 0.1.233 ... В командной строке нет проблем;однако, помещая эту команду в сценарий оболочки, я получаю сообщение об ошибке:

sed: couldn't open temporary file ../project/cas-dp-ap/sedwi3jVw: Permission denied 

Я не понимаю, откуда взялся этот временный файл sedwi.

У вас есть идеи, почемуУ меня есть этот временный файл и как я могу передать его?

$(sed -i "s/$current_version/$version/" $PATHPROJET$CREATE_PACKAGE/Chart.yaml)

++ sed -i s/0.1.233/0.1.234/ ../project/cas-dp-ap/Chart.yaml
sed: couldn't open temporary file ../project/cas-dp-ap/sedwi3jVw:   Permission denied
+ printf 'The version has been updated to : 0.1.234 \n\n \n\n'
The version has been updated to : 0.1.234 
+ printf '***********************************'

Ответы [ 2 ]

0 голосов
/ 31 января 2019

sed -i - это «редактирование на месте».Однако «на месте» не совсем.То, что происходит, выглядит так:

  • создайте временный файл
  • запустите sed для исходного файла и поместите изменения во временный файл
  • удалите оригинальный файл
  • переименовать временный файл как оригинальный

Например, если мы посмотрим на индекс измененного файла, мы увидим, что он изменился после запуска sed:

$ echo hello > a
$ ln a b
$ ls -lai a b
19005916 -rw-rw-r-- 2 jhnc jhnc 6 Jan 31 12:25 a
19005916 -rw-rw-r-- 2 jhnc jhnc 6 Jan 31 12:25 b
$ sed -i 's/hello/goodbye/' a
$ ls -lai a b
19005942 -rw-rw-r-- 1 jhnc jhnc 8 Jan 31 12:25 a
19005916 -rw-rw-r-- 1 jhnc jhnc 6 Jan 31 12:25 b
$ 

Thisозначает, что ваш скрипт должен иметь возможность создавать файлы в папке, в которой он выполняет редактирование на месте.

0 голосов
/ 31 января 2019

Правильный синтаксис идентичен в командной строке и в скрипте.Если вы использовали $(...) в приглашении, вы бы получили ту же ошибку.

sed -i "s/$current_version/$version/" "$PATHPROJET$CREATE_PACKAGE/Chart.yaml"

(Обратите внимание также на кавычки вокруг имени файла. Возможно, ваши личные переменные должны использовать нижний регистр.)

Синтаксис

$(command)

берет вывод из command и пытается выполнить его как команду.Обычно вы используете эту конструкцию - называемую подстановка команд - для интерполяции вывода команды в строку, например

echo "Today is $(date)"

(хотя date +"Today is %c", вероятно, лучшеспособ сделать эту конкретную вещь).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...