Измените каталог сценария на домашний каталог пользователя в сценарии оболочки

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

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

cd ~foo

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

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

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

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

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

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

Вот сценарий:

#!/bin/bash

user="foo"
cd ~$user

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

cd ~foo

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

4 ответа

Решение

Как насчет

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

а также

USER=foo
eval cd ~$USER

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

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

cd $HOME

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

#!/bin/bash

cd ~sbright

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

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

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

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

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

#!/bin/bash

cd /home/$USER

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

Другие вопросы по тегам