@ VarunAgw haha, zabawne znalezisko, tak jak myślałem o tym samym rozwiązaniu. Wstyd. Przez chwilę myślałem, że jestem wyjątkowym motylem :(
Gravy
Odpowiedzi:
14
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
Zamiast zmieniać UID i GID, możemy po prostu useradd 'tmp', a następnie zastąpić tmpz~
VarunAgw
Prawdziwe. dobry pomysł. Nie jestem pewien, co sądzę o legitymizacji go shadowwpisem, ale przypuszczam, że dopóki hasło nie zostanie ustawione, nie stanowi to dodatkowego ryzyka.
Sos
8
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/2done
Cóż, cd ~~/foo/barnie zadziała tak dobrze, ani vim ~~/foo.txt, itd.
derobert
1
Pytanie jest niejasne. Jeśli jest to pożądane użycie, użyłbym CDPATHzmiennej do obsługi cdsprawy.
glenn jackman
Zgadzam się, że nie jest w pełni jasne, ale OP prosi, aby działało jak ~. I ~nie jest używany jak polecenie.
derobert
Uznałem to za całkiem zrozumiałe, jeśli nie całkowicie określone. Problem CDPATHpolega na tym, że nie działa dla poleceń spoza ... CD. IE mogłeś cd ~~albo cd ~~/testdir1ale nie możnavim ~~testdir1
Gravy
możesz lepiej zrobić z aliasem, który wywołuje funkcję. jakalias cd~='HOME=$OTHER_HOME; home(){ cd -- "$1"; HOME=~$USER; unset -f home;}; home '
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:zamień
1111
jako UID na coś, co ma sens, zamień/test
na katalog, który chcesz ~~ naśladować.99
w moim systemie jestnobody
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żytkownikatmp
na~
i zmienić lokalizacjęhome directory
źródło
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 wsh
)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.
źródło
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
Cały czas się zmieniam i zachowuję funkcję w pliku środowiska mojej powłoki do resetowania: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: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 jednegocd
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ę docd
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.
źródło
Działa doskonale jako funkcja bash:
Oto inne podejście, które jest trochę bliżej (wiem, że nie zbliżam się tak bardzo do wymagań)
Następnie z kilkoma kolejnymi postaciami:
źródło
cd ~~/foo/bar
nie zadziała tak dobrze, anivim ~~/foo.txt
, itd.CDPATH
zmiennej do obsługicd
sprawy.~
. I~
nie jest używany jak polecenie.CDPATH
polega na tym, że nie działa dla poleceń spoza ... CD. IE mogłeścd ~~
albocd ~~/testdir1
ale nie możnavim ~~testdir1
alias cd~='HOME=$OTHER_HOME; home(){ cd -- "$1"; HOME=~$USER; unset -f home;}; home '