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/passwdpliku:
~:x:1111:99:special Character user:/test:/sbin/nologin
zamień 1111jako UID na coś, co ma sens, zamień /testna katalog, który chcesz ~~ naśladować.
99w moim systemie jest nobodygrupa, 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/nologinjako powłoka nie powinna być używana, nie będzie też miała /etc/shadowpozycji, 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 tmpa następnie zmodyfikować /etc/passwdi /etc/shadowzmienić użytkownika tmpna ~i zmienić lokalizacjęhome directory
useradd 'tmp', a następnie zastąpić tmpz~
shadowwpisem, 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 ~~/someFilez 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 ~/blub ~/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 $HOMEzmiennej powłoki, albo wcale.
Więc:
(HOME=/tmp; cd ~)
pwd; echo "$HOME"
/tmp
/home/mikeserv
$HOMECał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. $HOMEjest 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ć $CDPATHwbudowane 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
cdjest koniecznie wbudowaną powłoką, ale nie jest specjalną wbudowaną powłoką POSIX , więc zadeklarowanie wartości dla $CDPATHnie wpływa na jego bieżącą wartość. Jeśli użyjesz go tak jak ja, powyższa $CDPATHwartość zostanie zmieniona tylko dla środowiska jednego cdpolecenia, 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 cdpolecenia 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/barnie zadziała tak dobrze, ani vim ~~/foo.txt, itd.
CDPATHzmiennej do obsługi cdsprawy.
~. I ~nie jest używany jak polecenie.
CDPATHpolega na tym, że nie działa dla poleceń spoza ... CD. IE mogłeś cd ~~albo cd ~~/testdir1ale nie możnavim ~~testdir1
alias cd~='HOME=$OTHER_HOME; home(){ cd -- "$1"; HOME=~$USER; unset -f home;}; home '