Получить каталог, из которого был вызван скрипт

10

У меня есть сценарий doSmthв /usr/bin. Можно ли получить и распечатать каталог, из которого был вызван скрипт ?

Так что если я позвоню, doSmthс /home/meвыхода будет /home/me.

Примож Краль
источник
На каком языке?
Иордания
Ухх, в баш :)
Примож Краль

Ответы:

11

Когда вы вызываете команду в оболочке, новый процесс наследует рабочий каталог родителя. Вот два способа получить рабочий каталог:

echo "$PWD" # variable
pwd         # builtin command
jordanm
источник
1

Под «каталогом, из которого он был вызван», вы, похоже, подразумеваете его рабочий каталог. Вы можете изменить это внутри скрипта, используя, например, cdно, прежде чем сделать это, pwdраспечатаете его. Это также, вероятно, будет в переменной$PWD

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

#!/bin/bash
initial_wd=`pwd`

# ... do a lot of stuff ...
# ⋮

cd "$initial_wd"

Если вы используете это, чтобы вернуться в каталог, в котором вы начали, смотрите также pushdи popd.

derobert
источник
3
В bash также есть "$ OLDPWD".
Иордания
@jordanm Действительно, есть, но это не обязательно будет начальный рабочий каталог (например, если вы использовали cdдважды)
derobert
$ OLDPWD - это то, что мне нужно; Я запускаю bash-скрипты из CMD Prompt на Win7, и это была переменная среды, в которой находился каталог, из которого я запускал скрипт. Приветствия
Даррен Бишоп