Я хочу ~~
вказати на інший каталог, щоб я міг використовувати його як ярлик. Я хочу, щоб він мав абсолютно такі ж функції, як і ~
. Як я можу це зробити?
Я хочу ~~
вказати на інший каталог, щоб я міг використовувати його як ярлик. Я хочу, щоб він мав абсолютно такі ж функції, як і ~
. Як я можу це зробити?
Відповіді:
Насправді спосіб є, це не чудовий спосіб, але це спосіб, ха-ха!
Додайте у /etc/passwd
файл наступне :
~:x:1111:99:special Character user:/test:/sbin/nologin
замініть 1111
як UID чимось, що має сенс, замініть /test
каталог, який потрібно ~~ імітувати.
99
у моїй системі - це nobody
група, яку я рекомендую, якщо ви робите це, щоб переконатися, що це група без дозволів на будь-який файл, який коли-небудь звикне. Теоретично, /sbin/nologin
як оболонку, вона не може бути використана, вона також не буде мати /etc/shadow
запис, щоб не мати пароля. Теоретично має бути добре, але переконайтеся, що це якось не дозволяє вам увійти як обліковий запис.
Як зауваження: я жодним чином не кажу, що це гарна ідея, але вона забезпечить функціонал, який ви хочете.
EDIT: Для повноти це було запропоновано VarunAgw: Ви можете додати користувача в звичайному режимі з , useradd -s /sbin/nologin -N tmp
а потім змінити /etc/passwd
і /etc/shadow
змінити користувача tmp
до ~
і змінити розташування зhome directory
useradd 'tmp'
і замінити tmp
з~
shadow
запису, але я гадаю, що поки не встановлено пароль, це насправді не є додатковим ризиком.
Ви можете використовувати CDPATH і помістити каталог, буквально названий ~~
в одному з ваших компонентів CDPATH.
З man bash
(але CDPATH доступний навіть у sh
)
Шлях пошуку для команди CD. Це розділений двокрапкою список каталогів, в яких оболонка шукає каталоги призначення, вказані командою cd. Вибірковим значенням є ".: ~: / Usr".
Це дозволить вам зробити cd ~~
.
Якщо ви хочете робити такі речі, як vi ~~/someFile
з будь-якого місця в дереві каталогів, вам не пощастить, якщо ви наполягаєте ~~
буквально, якщо ви не зламаєте свою оболонку, однак ви можете використовувати змінні чи змінну середовища для зберігання ваших магічних каталогів, щоб ви могли робити , наприклад,$tilda/someFile
Зазвичай я розміщую файли, які часто отримують доступ, до коротко названих каталогів у своєму домашньому каталозі, щоб я мав доступ до них шляхом, наприклад, ~/b
або ~/l
.
Природно, ви зазвичай можете замінювати каталоги символьними посиланнями на каталоги скільки завгодно.
Розширення оболонки ~
тильди здебільшого програмоване. Він розширюється або до каталогу користувачів системного імені користувача, оголошеного в його кінцевому контексті (і відмінне рішення по цих рядках вже запропоновано) , значення $HOME
змінної оболонки, або зовсім не.
Тому:
(HOME=/tmp; cd ~)
pwd; echo "$HOME"
/tmp
/home/mikeserv
Я $HOME
весь час змінюю і зберігаю функцію у файлі оточення моєї оболонки для її скидання:
home(){
HOME=~$USER
cd ~; pwd
}
Якщо ви хочете використовувати ~
тильду таким чином, який не посилається на ваш домашній каталог, тоді зробіть це . Просто перепризначте $HOME
. Не бійтеся цього. $HOME
є просто змінною оболонки, як і будь-яка інша.
Ще одна пропозиція, яку я маю - це лише незначне розширення щодо чудової поради @ PSkocik щодо використання $CDPATH
. Однак, він не згадав про те, що ви можете використовувати та змінювати $CDPATH
вбудований текст, не змінюючи поточного значення оболонки $CDPATH
. Наприклад:
mkdir -p /tmp/1/2
CDPATH=/tmp cd 1/2
/tmp/1/2
cd
це обов'язково оболонка вбудована, але це не спеціальна вбудована оболонка POSIX , і тому оголошення значення $CDPATH
не впливає на його поточне значення оболонки. Якщо ви використовуєте його так, як я робив вище $CDPATH
, значення змінено лише для середовища однієї cd
команди, а потім буде відновлено попереднє значення. Я схильний вважати описану вище техніку найбільш корисною при використанні в поєднанні з завершенням історії. Я зроблю вищезазначене, перейду до каталогу, виконую кілька команд, а потім натискаю, доки я не повернусь до своєї cd
команди і не поверну проміжок шляху або два, щоб переміститися в інше місце.
Тепер, якщо ви поєднаєте ці два поняття, тоді ви можете зробити раніше використану команду означати щось зовсім інше наступного разу, коли ви її використовуєте.
for HOME in /tmp ~
do mkdir -p ~/1/2
CDPATH=~ cd 1/2
done
/tmp/1/2
/home/mikeserv/1/2
Відмінно працює як функція bash:
$ function ~~ { cd /tmp; }
$ pwd
/home/jackman
$ ~~
$ pwd
/tmp
$ cd -
$ pwd
/home/jackman
Ось ще один підхід, який трохи ближче (я знаю, я не наближаюся до вимог)
function ~~ { echo /test; }
Потім ще з парою символів:
cd `~~`/subdir
vi `~~`/file
cd ~~/foo/bar
не буде працювати так добре, або vim ~~/foo.txt
, і т.д. ...
CDPATH
змінну для обробки cd
справи.
~
. І ~
не використовується як команда.
CDPATH
тому, що він не працює для команд поза .... CD. IE ви могли cd ~~
або cd ~~/testdir1
не можетеvim ~~testdir1
alias cd~='HOME=$OTHER_HOME; home(){ cd -- "$1"; HOME=~$USER; unset -f home;}; home '