почему эта строка удаляет все вместо одной строки. Crontab-Баш-Sed - PullRequest
0 голосов
/ 03 ноября 2019

Мне нужно удалить строку файла cron, но когда я использую этот код сценария bash, он удаляет все из файла cron и не перезаписывает его новым результатом.

Я выбираю, какую строкуудалить с помощью переменной, которая читается как число, показанное ниже:

read $lineToRemove

crontab -l | sed "${lineToRemove}d" | crontab -

Насколько я понимаю, я читаю вводимые пользователем данные, если они пишут число 2, и нажимаю ввод. Затем файл crontab указан в первой части конвейерной линии. Затем функция sed используется для удаления строки с указанным номером в переменной, и результат записывается обратно в файл cron. Тем не менее, когда я делаю это, он удаляет все из файла cron

1 Ответ

1 голос
/ 03 ноября 2019
Параметр

read должен исключать $, также как var=value исключает $. Вы read входите в переменную с именем $lineToRemove, а не lineToRemove.

$ read x 
hi
$ echo $x
hi
$ read $x 
hi
$ echo $hi
hi

Когда I read $x, переменная, в которой хранится значение, равна $x, а не x, например, hi. поэтому $hi впоследствии относится к вещи, прочитанной в $x.

...