Мне нужно написать сценарий оболочки, который может выполняться только в том случае, если он запускается из домашнего каталога текущего пользователя, вошедшего в систему, и я не знаю, как это проверить из самого сценария. Любая помощь будет оценена.
2 ответа
Вы можете использовать переменные окружения PWD и HOME: $PWD
- текущий рабочий каталог, а $HOME
- текущий домашний каталог пользователя. Вы можете предшествовать исполняемым операторам в вашем скрипте:
if [ "$PWD" != "$HOME" ]; then exit; fi
При желании вы можете добавить код ошибки в команду exit
на случай, если вызывающая оболочка захочет проверить успешность или неудачу сценария.
Еще одна полезная переменная - OLDPWD: $OLDPWD
- это предыдущий каталог перед последним изменением каталога. Вы можете использовать это для запуска скрипта из любого места, окружив скрипт:
cd "$HOME"
. . . . . .
cd "$OLDPWD"
Это предполагает, что в скрипте нет других изменений каталога; если нет, сначала используйте INITPWD="$PWD"
и вернитесь к $INITPWD
. На самом деле, в большинстве случаев сценарий будет выполняться в подоболочке, поэтому переход к исходному каталогу будет ненужным, поскольку исходный cd
не повлияет на родительскую оболочку.
может быть использовано в начале скрипта: LOCATION =/path/to/script if ["PWD"!= "$ LOCATION"]; тогда cd $ LOCATION