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

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

#!/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
задан 23 October 2013 в 04:04

2 ответа

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

lsof | grep safe.sh

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

0
ответ дан 23 October 2013 в 04:04

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

cp -an source_file target_file

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

0
ответ дан 23 October 2013 в 04:04

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

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