Bash не полностью функционален для нового пользователя

Портативно, PWD переменная установлена оболочкой на одно абсолютное местоположение текущего каталога. Любой компонент того пути может быть символьной ссылкой.

case $f in
  /*) absolute=$f;;
  *) absolute=$PWD/$f;;
esac

Если Вы хотите устранить . и .. также, изменитесь на каталог, содержащий файл, и получите $PWD там:

if [ -d "$f" ]; then f=$f/.; fi
absolute=$(cd "$(dirname -- "$f")"; printf %s. "$PWD")
absolute=${absolute%?}
absolute=$absolute/${f##*/}

Нет никакого портативного способа перейти по символьным ссылкам. Если у Вас есть путь к каталогу, то на большинстве нельдов $(cd -- "$dir" && pwd -P 2>/dev/null || pwd) обеспечивает путь, который не использует символьные ссылки, потому что оболочки, которые отслеживают символьные ссылки, имеют тенденцию реализовывать pwd -P (“P” для “физического”).

Некоторые нельды обеспечивают утилиту для печати “физического” пути к файлу.

  • Довольно недавние системы Linux (с GNU coreutils или BusyBox) имеют readlink -f также как и FreeBSD ≥8.3, NetBSD ≥4.0 и OpenBSD еще 2.2.
  • FreeBSD ≥4.3 имеет realpath (это также присутствует в некоторых системах Linux, и это находится в BusyBox).
  • Если Perl доступен, можно использовать Cwd модуль.

    perl -MCwd -e 'print Cwd::realpath($ARGV[0])' path/to/file
    

19
27.11.2011, 21:28
2 ответа

Вероятно, оболочка Джона не /bin/bash, но /bin/sh. На Ubuntu это - оболочка, предназначенная для выполнения сценариев быстро без необычных интерактивных функций, таких как выпуск командной строки. Проверьте последний столбец grep john /etc/passwd или getent passwd john. Вы могли бы хотеть работать chsh -s /bin/bash john изменить оболочку пользователя.

36
27.01.2020, 19:44
  • 1
    , который действительно имел место! –   27.11.2011, 22:03
  • 2
    Просто примечание. В Ubuntu /bin/sh символьная ссылка на dash т.е. /bin/dash, таким образом, в конечном счете оболочка пользователя /bin/dash. –  Sachin Divekar 27.11.2011, 22:52

можно перейти между оболочками путем введения имени оболочки

$ bash

и в следующей строке Вы получите этот после подсказки

user@hostname$ 

который является оболочкой удара. Ваша клавиша со стрелкой вверх и автоматическое заполнение будут работать теперь

4
27.01.2020, 19:44
  • 1
    Нужно отметить, что это является очевидно временным. В настоящее время принимаемый ответ имеет более постоянное решение. –  jw013 07.11.2012, 16:30
  • 2
    хорошо, я не знал, что, спасибо, для которого я сохраню принятый ответ для дальнейшего использования –  Saad 08.11.2012, 08:28

Теги

Похожие вопросы