Мне нужно написать сценарий оболочки, который может выполняться только в том случае, если он запускается из домашнего каталога текущего пользователя, вошедшего в систему, и я не знаю, как это проверить из самого сценария. Любая помощь будет оценена.

2 ответа2

3

Вы можете использовать переменные окружения PWD и HOME: $PWD - текущий рабочий каталог, а $HOME - текущий домашний каталог пользователя. Вы можете предшествовать исполняемым операторам в вашем скрипте:

if [ "$PWD" != "$HOME" ]; then exit; fi

При желании вы можете добавить код ошибки в команду exit на случай, если вызывающая оболочка захочет проверить успешность или неудачу сценария.

Еще одна полезная переменная - OLDPWD: $OLDPWD - это предыдущий каталог перед последним изменением каталога. Вы можете использовать это для запуска скрипта из любого места, окружив скрипт:

cd "$HOME"
. . . . . .
cd "$OLDPWD"

Это предполагает, что в скрипте нет других изменений каталога; если нет, сначала используйте INITPWD="$PWD" и вернитесь к $INITPWD . На самом деле, в большинстве случаев сценарий будет выполняться в подоболочке, поэтому переход к исходному каталогу будет ненужным, поскольку исходный cd не повлияет на родительскую оболочку.

0

может быть использовано в начале скрипта: LOCATION =/path/to/script if ["PWD"!= "$ LOCATION"]; тогда cd $ LOCATION

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .