Почему этот сценарий работает в текущем каталоге, но не работает, когда помещается в путь?

Я хочу заменить свою неисправную память очень маленьким сценарием оболочки.

#!/bin/sh
if ! [ –a $1.sav ]; then
    mv $1 $1.sav
    cp $1.sav $1
fi
nano $1 

предназначен для сохранения оригинальной версии скрипта. Если оригинал был сохранен ранее, он пропускает перемещение и копирование назад (и я использую перемещение и копирование назад, чтобы сохранить метку времени оригинала).

Это работает как задумано, если после того, как я сделаю его исполняемым с помощью chmod, я запусту его из каталога, в котором я редактирую, например, с

./ safe.sh filename

Однако, когда я перемещаю его в / usr / bin (поэтому он находится в пути, как проверено с помощью echo $ PATH ) и затем я пытаюсь запустить его в другом каталоге (без начального ./), он завершается с

-bash: /usr/bin/safe.sh: / bin / sh: плохой интерпретатор: текстовый файл занят

Д'о? Пытливый ум хочет знать, как заставить это работать.

0
задан 17.04.2020, 19:17

2 ответа

«Текстовый файл занят» подразумевает, что скрипт используется в другом месте. Узнайте, что открывает файл, используя:

lsof | grep safe.sh

Затем остановите этот процесс при необходимости.

0
ответ дан 17.04.2020, 19:17
  • 1
    Ну, день спустя, на перетестировании, это работает AOK. Пойди разберись. Никакие изменения, lsof строка от Andy показывает, что ничто не вводит файл, таким образом, я полагаю, что что-то вводило файл, и время вело, это, чтобы быть выпущенным любым процессом содержало его. – NeonNatureEX 17.04.2020, 19:18
  • 2
    Довольный it' s работающий теперь, можно быть правы относительно почему это wasn' t разоблачение. – HE XUAN-WEI 17.04.2020, 19:18

Не ответ, а просто (может быть, ценный) совет:
будет ли это лучшим решением вместо сценария?

cp -an source_file target_file

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

0
ответ дан 17.04.2020, 19:18

Теги

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