Chcę ~~
wskazać inny katalog, aby można go było używać jako skrótu. Chcę, żeby miał dokładnie takie same funkcje jak ~
. W jaki sposób mogę to zrobić?
Chcę ~~
wskazać inny katalog, aby można go było używać jako skrótu. Chcę, żeby miał dokładnie takie same funkcje jak ~
. W jaki sposób mogę to zrobić?
Odpowiedzi:
Właściwie jest sposób, to nie jest świetny sposób, ale jest sposób, haha!
Dodaj następujące elementy do /etc/passwd
pliku:
~:x:1111:99:special Character user:/test:/sbin/nologin
zamień 1111
jako UID na coś, co ma sens, zamień /test
na katalog, który chcesz ~~ naśladować.
99
w moim systemie jest nobody
grupa, którą polecam, jeśli zrobisz to, aby upewnić się, że jest to grupa BEZ uprawnień dla dowolnego pliku, który kiedykolwiek zostanie wykorzystany. Teoretycznie /sbin/nologin
jako powłoka nie powinna być używana, nie będzie też miała /etc/shadow
pozycji, więc nie będzie miała hasła. Teoretycznie powinno być w porządku, ale upewnij się, że nie pozwoli ci to zalogować się jako konto.
Na marginesie: Nie mówię w żaden sposób, że jest to dobry pomysł, ale osiągnie pożądaną funkcjonalność.
EDYCJA: Dla kompletności zostało to zasugerowane przez VarunAgw: Możesz dodać użytkownika jak zwykle za pomocą, useradd -s /sbin/nologin -N tmp
a następnie zmodyfikować /etc/passwd
i /etc/shadow
zmienić użytkownika tmp
na ~
i zmienić lokalizacjęhome directory
useradd 'tmp'
, a następnie zastąpić tmp
z~
shadow
wpisem, ale przypuszczam, że dopóki hasło nie zostanie ustawione, nie stanowi to dodatkowego ryzyka.
Możesz skorzystać z CDPATH i umieścić katalog dosłownie ~~
w jednym ze składników CDPATH.
Od man bash
(ale CDPATH jest dostępny nawet w sh
)
Ścieżka wyszukiwania dla polecenia cd. Jest to rozdzielona dwukropkami lista katalogów, w których powłoka szuka katalogów docelowych określonych przez polecenie cd. Przykładowa wartość to „.: ~: / Usr”.
To pozwoli ci to zrobić cd ~~
.
Jeśli chcesz robić rzeczy vi ~~/someFile
z dowolnego miejsca w drzewie katalogów, nie masz szczęścia, jeśli nalegasz ~~
dosłownie, chyba że włamiesz się do powłoki, jednak możesz użyć zmiennych lub zmiennej środowiskowej do przechowywania swoich magicznych katalogów, abyś mógł to zrobić np.$tilda/someFile
Zwykle umieszczam często używane pliki w katalogach o krótkich nazwach w moim katalogu domowym, aby uzyskać do nich dostęp za pomocą ścieżek takich jak ~/b
lub ~/l
.
Naturalnie, zwykle możesz zastąpić katalogi dowiązaniami symbolicznymi do katalogów, ile chcesz.
Rozszerzanie ~
tyldy powłoki jest w większości programowalne. Rozwija się albo do katalogu użytkownika systemowej nazwy użytkownika zadeklarowanego w końcowym kontekście (i już zaproponowano doskonałe rozwiązanie w tym zakresie) , wartości $HOME
zmiennej powłoki, albo wcale.
Więc:
(HOME=/tmp; cd ~)
pwd; echo "$HOME"
/tmp
/home/mikeserv
$HOME
Cały czas się zmieniam i zachowuję funkcję w pliku środowiska mojej powłoki do resetowania:
home(){
HOME=~$USER
cd ~; pwd
}
Jeśli chcesz użyć ~
tyldy w sposób, który nie odnosi się do twojego katalogu domowego, zrób to . Po prostu ponownie przypisz $HOME
. Nie bój się tego. $HOME
jest po prostu zmienną powłoki jak każda inna.
Inną sugestią, którą mam, jest tylko niewielkie rozwinięcie doskonałej porady @ PSkocik na temat używania $CDPATH
. Jedną rzeczą, o której nie wspomniał, jest to, że możesz używać i modyfikować $CDPATH
wbudowane bez zmiany bieżącej wartości powłoki $CDPATH
. Na przykład:
mkdir -p /tmp/1/2
CDPATH=/tmp cd 1/2
/tmp/1/2
cd
jest koniecznie wbudowaną powłoką, ale nie jest specjalną wbudowaną powłoką POSIX , więc zadeklarowanie wartości dla $CDPATH
nie wpływa na jego bieżącą wartość. Jeśli użyjesz go tak jak ja, powyższa $CDPATH
wartość zostanie zmieniona tylko dla środowiska jednego cd
polecenia, a następnie zostanie przywrócona do poprzedniej wartości. Wydaje mi się, że powyższa technika jest najbardziej użyteczna w połączeniu z uzupełnianiem historii. Zrobię powyższą rzecz, przejdę do katalogu, uruchomię kilka poleceń, a następnie naciskam w górę, aż wrócę do cd
polecenia i cofam się o segment lub dwa ścieżki, aby przejść w inne miejsce.
Teraz, jeśli połączysz te dwie koncepcje, możesz sprawić, by poprzednio używane polecenie oznaczało coś zupełnie innego przy następnym użyciu.
for HOME in /tmp ~
do mkdir -p ~/1/2
CDPATH=~ cd 1/2
done
/tmp/1/2
/home/mikeserv/1/2
Działa doskonale jako funkcja bash:
$ function ~~ { cd /tmp; }
$ pwd
/home/jackman
$ ~~
$ pwd
/tmp
$ cd -
$ pwd
/home/jackman
Oto inne podejście, które jest trochę bliżej (wiem, że nie zbliżam się tak bardzo do wymagań)
function ~~ { echo /test; }
Następnie z kilkoma kolejnymi postaciami:
cd `~~`/subdir
vi `~~`/file
cd ~~/foo/bar
nie zadziała tak dobrze, ani vim ~~/foo.txt
, itd.
CDPATH
zmiennej do obsługi cd
sprawy.
~
. I ~
nie jest używany jak polecenie.
CDPATH
polega na tym, że nie działa dla poleceń spoza ... CD. IE mogłeś cd ~~
albo cd ~~/testdir1
ale nie możnavim ~~testdir1
alias cd~='HOME=$OTHER_HOME; home(){ cd -- "$1"; HOME=~$USER; unset -f home;}; home '