Измените каталог сценария на домашний каталог пользователя в сценарии оболочки - PullRequest
5 голосов
/ 06 февраля 2009

В моем скрипте bash мне нужно изменить текущий каталог на домашний каталог пользователя.

если я хочу перейти на foo home dir пользователя, из командной строки я могу сделать:

cd ~foo

Что отлично работает, однако, когда я делаю то же самое из скрипта , он говорит мне:

./bar.sh: line 4: cd: ~foo: No such file or directory

Швы, как будто это было бы тривиально, но это не работает. В чем здесь проблема? Нужно ли мне избегать "~" или пропущенных кавычек или чего-то еще?

Редактировать

когда я говорю пользователь Я не имею в виду текущий пользователь, который запускает скрипт, но в целом любой другой пользователь в системе

Редактировать

Вот скрипт:

#!/bin/bash

user="foo"
cd ~$user

, если имя пользователя жестко закодировано как

cd ~foo

это работает, но если оно находится в переменной user , то это не так. Что мне здесь не хватает?

Ответы [ 4 ]

15 голосов
/ 06 февраля 2009

А как же

cd $(getent passwd foo | cut -d: -f6)

и

USER=foo
eval cd ~$USER

тоже работает (foo это имя пользователя)

8 голосов
/ 06 февраля 2009

Измените его на:

cd $HOME

На самом деле, я не уверен, почему cd ~whatever не сработает. Я только что протестировал с небольшим скриптом, и он работал нормально:

#!/bin/bash

cd ~sbright

Я действительно получаю то же сообщение об ошибке, что и вы, когда указанный пользователь не существует в системе. Вы уверены (и да, я знаю, что это один из тех вопросов «подключен ли он»), что пользователь существует и у него указан правильный домашний каталог?

Edit:

Теперь, когда я вижу, что вы на самом деле делаете ... расширение тильды происходит до интерполяции переменных, поэтому вы получаете эту ошибку.

0 голосов
/ 09 февраля 2009

Будет ли скрипт запускаться пользователем? Если это так, вы можете просто сделать: cd ~

0 голосов
/ 06 февраля 2009

Есть ли причина, по которой вы не можете сделать:

#!/bin/bash

cd /home/$USER

Конечно, каталоги не находятся в / home на всех * никсах, но, если вы знаете, для какой ОС / дистрибутива предназначен ваш скрипт, вы сможете найти что-то, что работает достаточно хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...