Я хочу заменить свою неисправную память очень маленьким сценарием оболочки.
#!/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: плохой интерпретатор: текстовый файл занят
Д'о? Пытливый ум хочет знать, как заставить это работать.
«Текстовый файл занят» подразумевает, что скрипт используется в другом месте. Узнайте, что открывает файл, используя:
lsof | grep safe.sh
Затем остановите этот процесс при необходимости.
Не ответ, а просто (может быть, ценный) совет:
будет ли это лучшим решением вместо сценария?
cp -an source_file target_file
Опция -a сохраняет все атрибуты, включая отметки времени .
Опция -n предотвращает перезапись существующего файла