Я хочу иметь скрипт, который переносит текущий рабочий каталог в переменную. Раздел, который нуждается в каталоге, похож на этот dir = pwd
. Он просто печатает pwd
, как мне получить текущий рабочий каталог в переменную?
Нет необходимости делать это, это уже in переменная:
$ echo $PWD
/home/terdon
Переменная PWD
определяется POSIX и будет работать со всеми POSIX-совместимыми оболочками:
PWD
Установить по оболочке и утилите cd. В оболочке значение должны быть инициализированы из окружающей среды следующим образом. Если значение для PWD передается оболочке в среде, когда она выполняется, значение - это абсолютный путь к текущему рабочему каталогу не более {PATH_MAX} байтов, включая завершающий нулевой байт и значение не содержит каких-либо компонентов, которые являются точечными или точечными затем оболочка должна установить значение PWD из среды. В противном случае, если значение для PWD передается оболочке в среда, когда она выполняется, значение является абсолютным путем текущий рабочий каталог, и значение не содержит ни одного компоненты, которые являются точечными или точечными, тогда не указано, является ли оболочка устанавливает PWD в значение из среды или устанавливает PWD в pathname, который будет выведен pwd -P. В противном случае, утилита sh устанавливает PWD для пути, который будет выведен pwd -P. В случаях где PWD установлен на значение из среды, значение может содержать компоненты, которые относятся к файлам типа символической ссылки. В случаях где PWD установлен на путь, который будет выведен pwd -P, если в текущем рабочем каталоге недостаточно разрешения или на любом родителе этого каталога, чтобы определить, что будет с этим именем пути быть, значение PWD не указано. Задания этой переменной могут быть проигнорированным. Если приложение устанавливает или сбрасывает значение PWD, то Поведение утилит cd и pwd не указано.
Для более общего ответа способ сохранить вывод команды в переменной состоит в том, чтобы заключить команду в $ ()
или ``
(задние тики):
var=$(command)
или
var=`command`
Из них $ ()
является предпочтительным, поскольку легче создавать сложные команды, такие как command0 $ (command1 $ (command2 $ (command3))
.
dir = $ (pwd)
Это более портативно и предпочтительнее метода обратной связи.
Использование $ ()
позволяет прикрепить команды
например: mech_pwd = $ (pwd; echo in $ (hostname))
Вам нужно использовать замену команды, чтобы сохранить вывод команды pwd
в переменную. Замена команд может использовать бабки или долларовые символы. Нравится:
$ mkdir "/tmp/new dir"
$ cd "/tmp/new dir"
$ CWD="$(pwd)"
$ echo $CWD
/tmp/new dir
$ cd ~
$ echo $CWD
/tmp/new dir
$ pwd
/home/ja
Значение текущего рабочего каталога может быть другим. Если вы использовали символические ссылки для получения текущего каталога, pwd даст результаты, отличные от / usr / bin / pwd. Поскольку вы используете bash, я бы использовал:
dir=$(/usr/bin/pwd)
или согласно комментарию:
dir=$(pwd -P)
так как я не люблю обратные цитаты, так как они не могут гнездиться.