Créez un autre raccourci `~~` comme `~` (répertoire personnel)
10
Je veux ~~pointer vers un répertoire différent afin de pouvoir l'utiliser comme raccourci. Je veux qu'il ait exactement les mêmes fonctionnalités que ~. Comment puis-je faire ceci?
@VarunAgw haha, drôle de trouvaille, juste comme j'avais pensé à la même solution. La honte. Je pensais que j'étais un papillon unique pendant une minute :(
Gravy
Réponses:
14
En fait, il y a un moyen, ce n'est pas un excellent moyen, mais c'est un moyen, haha!
Ajoutez les éléments suivants à votre /etc/passwdfichier:
~:x:1111:99:special Character user:/test:/sbin/nologin
remplacez le 1111comme UID par quelque chose qui a du sens, remplacez-le /testpar le répertoire que vous souhaitez ~~ imiter.
99sur mon système est le nobodygroupe que je recommande si vous le faites pour vous assurer qu'il s'agit d'un groupe sans autorisations sur aucun fichier qui sera utilisé. Théoriquement avec /sbin/nologincomme shell, il ne devrait pas pouvoir être utilisé, il n'aura pas non plus d' /etc/shadowentrée donc il n'aura pas de mot de passe. Théoriquement, ça devrait aller, mais assurez-vous que cela ne vous permet pas de vous connecter en tant que compte.
En remarque: je ne dis en aucune façon que c'est une bonne idée, mais cela accomplira les fonctionnalités que vous souhaitez.
EDIT: Pour être complet cela a été suggéré par VarunAgw: Vous pouvez ajouter l'utilisateur comme d' habitude avec useradd -s /sbin/nologin -N tmpet ensuite modifier /etc/passwdet /etc/shadowde changer l'utilisateur tmpde ~changer l'emplacement duhome directory
Au lieu de changer l'UID et le GID, nous pouvons simplement useradd 'tmp'et ensuite remplacer tmppar~
VarunAgw
Vrai. bonne suggestion. Je ne sais pas ce que je pense de le légitimer avec une shadowentrée, mais je suppose que tant qu'aucun mot de passe n'est défini, ce n'est pas vraiment un risque supplémentaire.
Gravy
8
Vous pouvez utiliser CDPATH et placer un répertoire nommé littéralement ~~ dans l'un de vos composants CDPATH.
De man bash(mais CDPATH est disponible même en sh)
Chemin de recherche de la commande cd. Il s'agit d'une liste de répertoires séparés par deux points dans laquelle le shell recherche les répertoires de destination spécifiés par la commande cd. Un exemple de valeur est ".: ~: / Usr".
Cela vous permettra de le faire cd ~~.
Si vous voulez faire des choses comme vi ~~/someFilen'importe où dans l'arborescence des répertoires, alors vous n'avez pas de chance si vous insistez ~~littéralement, sauf si vous piratez votre shell, cependant, vous pouvez utiliser des variables ou une variable d'environnement pour stocker vos répertoires magiques afin que vous puissiez faire , par exemple,$tilda/someFile
Je place généralement des fichiers souvent consultés dans des répertoires brièvement nommés dans mon répertoire personnel afin que je puisse y accéder avec des chemins tels que ~/bou ~/l.
Naturellement, vous pouvez généralement remplacer les répertoires par des liens symboliques vers les répertoires autant que vous le souhaitez.
L' ~expansion tilde du shell est principalement programmable. Il se développe soit vers le répertoire utilisateur du nom d'utilisateur du système déclaré dans son contexte de fin (et une excellente solution dans ce sens a déjà été proposée) , soit la valeur de la $HOMEvariable shell, ou pas du tout.
Donc:
(HOME=/tmp; cd ~)
pwd; echo "$HOME"
/tmp
/home/mikeserv
Je change $HOMEtout le temps, et je garde une fonction dans le fichier d'environnement de mon shell pour le réinitialiser:
home(){
HOME=~$USER
cd ~; pwd
}
Si vous souhaitez utiliser le ~tilde d'une manière qui ne fait pas référence à votre répertoire personnel, faites-le . Réattribuez simplement $HOME. N'ayez pas peur de ça. $HOMEest juste une variable shell comme les autres.
Une autre suggestion que j'ai n'est qu'une légère extension des excellents conseils de @ PSkocik sur l'utilisation $CDPATH. Une chose qu'il n'a pas mentionnée, cependant, est que vous pouvez utiliser et modifier en $CDPATHligne sans modifier la valeur actuelle du shell pour $CDPATH. Par exemple:
mkdir -p /tmp/1/2
CDPATH=/tmp cd 1/2
/tmp/1/2
cdest nécessairement un shell intégré, mais ce n'est pas un shell spécial POSIX , et donc déclarer la valeur pour $CDPATHn'affecte pas sa valeur shell actuelle. Si vous l'utilisez comme je l'ai fait ci-dessus, $CDPATHla valeur n'est modifiée que pour l'environnement de la seule cdcommande et est ensuite restaurée à sa valeur précédente. J'ai tendance à trouver la technique ci-dessus la plus utile lorsqu'elle est utilisée en combinaison avec l'achèvement de l'historique. Je vais faire la chose ci-dessus, passer à un répertoire, exécuter quelques commandes, puis appuyer jusqu'à ce que je revienne à ma cdcommande et revenir en arrière sur un segment de chemin ou deux pour aller ailleurs.
Maintenant, si vous combinez ces deux concepts, vous pouvez faire en sorte qu'une commande précédemment utilisée signifie quelque chose de complètement différent la prochaine fois que vous l'utiliserez.
for HOME in/tmp ~do mkdir -p ~/1/2
CDPATH=~ cd 1/2done
Eh bien, cd ~~/foo/barça ne va pas si bien fonctionner, ou vim ~~/foo.txt, etc ...
derobert
1
La question n'est pas claire. Si c'est l'utilisation souhaitée, j'utiliserais la CDPATHvariable pour gérer le cdcas.
glenn jackman
D'accord, ce n'est pas tout à fait clair, mais OP demande qu'il fonctionne comme ~. Et ~n'est pas utilisé comme une commande.
derobert
Je l'ai trouvé assez compréhensible moi-même, sinon complètement expliqué. Le problème CDPATHest que cela ne fonctionne pas pour les commandes en dehors de .... CD. IE vous pourriez cd ~~ou cd ~~/testdir1vous ne pourriez pasvim ~~testdir1
Gravy
vous pourriez faire mieux avec un alias qui appelle une fonction. commealias cd~='HOME=$OTHER_HOME; home(){ cd -- "$1"; HOME=~$USER; unset -f home;}; home '
Réponses:
En fait, il y a un moyen, ce n'est pas un excellent moyen, mais c'est un moyen, haha!
Ajoutez les éléments suivants à votre
/etc/passwd
fichier:remplacez le
1111
comme UID par quelque chose qui a du sens, remplacez-le/test
par le répertoire que vous souhaitez ~~ imiter.99
sur mon système est lenobody
groupe que je recommande si vous le faites pour vous assurer qu'il s'agit d'un groupe sans autorisations sur aucun fichier qui sera utilisé. Théoriquement avec/sbin/nologin
comme shell, il ne devrait pas pouvoir être utilisé, il n'aura pas non plus d'/etc/shadow
entrée donc il n'aura pas de mot de passe. Théoriquement, ça devrait aller, mais assurez-vous que cela ne vous permet pas de vous connecter en tant que compte.En remarque: je ne dis en aucune façon que c'est une bonne idée, mais cela accomplira les fonctionnalités que vous souhaitez.
EDIT: Pour être complet cela a été suggéré par VarunAgw: Vous pouvez ajouter l'utilisateur comme d' habitude avec
useradd -s /sbin/nologin -N tmp
et ensuite modifier/etc/passwd
et/etc/shadow
de changer l'utilisateurtmp
de~
changer l'emplacement duhome directory
la source
useradd 'tmp'
et ensuite remplacertmp
par~
shadow
entrée, mais je suppose que tant qu'aucun mot de passe n'est défini, ce n'est pas vraiment un risque supplémentaire.Vous pouvez utiliser CDPATH et placer un répertoire nommé littéralement
~~
dans l'un de vos composants CDPATH.De
man bash
(mais CDPATH est disponible même ensh
)Cela vous permettra de le faire
cd ~~
.Si vous voulez faire des choses comme
vi ~~/someFile
n'importe où dans l'arborescence des répertoires, alors vous n'avez pas de chance si vous insistez~~
littéralement, sauf si vous piratez votre shell, cependant, vous pouvez utiliser des variables ou une variable d'environnement pour stocker vos répertoires magiques afin que vous puissiez faire , par exemple,$tilda/someFile
Je place généralement des fichiers souvent consultés dans des répertoires brièvement nommés dans mon répertoire personnel afin que je puisse y accéder avec des chemins tels que
~/b
ou~/l
.Naturellement, vous pouvez généralement remplacer les répertoires par des liens symboliques vers les répertoires autant que vous le souhaitez.
la source
L'
~
expansion tilde du shell est principalement programmable. Il se développe soit vers le répertoire utilisateur du nom d'utilisateur du système déclaré dans son contexte de fin (et une excellente solution dans ce sens a déjà été proposée) , soit la valeur de la$HOME
variable shell, ou pas du tout.Donc:
Je change
$HOME
tout le temps, et je garde une fonction dans le fichier d'environnement de mon shell pour le réinitialiser:Si vous souhaitez utiliser le
~
tilde d'une manière qui ne fait pas référence à votre répertoire personnel, faites-le . Réattribuez simplement$HOME
. N'ayez pas peur de ça.$HOME
est juste une variable shell comme les autres.Une autre suggestion que j'ai n'est qu'une légère extension des excellents conseils de @ PSkocik sur l'utilisation
$CDPATH
. Une chose qu'il n'a pas mentionnée, cependant, est que vous pouvez utiliser et modifier en$CDPATH
ligne sans modifier la valeur actuelle du shell pour$CDPATH
. Par exemple:cd
est nécessairement un shell intégré, mais ce n'est pas un shell spécial POSIX , et donc déclarer la valeur pour$CDPATH
n'affecte pas sa valeur shell actuelle. Si vous l'utilisez comme je l'ai fait ci-dessus,$CDPATH
la valeur n'est modifiée que pour l'environnement de la seulecd
commande et est ensuite restaurée à sa valeur précédente. J'ai tendance à trouver la technique ci-dessus la plus utile lorsqu'elle est utilisée en combinaison avec l'achèvement de l'historique. Je vais faire la chose ci-dessus, passer à un répertoire, exécuter quelques commandes, puis appuyer jusqu'à ce que je revienne à macd
commande et revenir en arrière sur un segment de chemin ou deux pour aller ailleurs.Maintenant, si vous combinez ces deux concepts, vous pouvez faire en sorte qu'une commande précédemment utilisée signifie quelque chose de complètement différent la prochaine fois que vous l'utiliserez.
la source
Fonctionne parfaitement bien comme fonction bash:
Voici une autre approche qui se rapproche un peu (je sais que je ne me rapproche pas autant des exigences)
Puis avec quelques autres personnages:
la source
cd ~~/foo/bar
ça ne va pas si bien fonctionner, ouvim ~~/foo.txt
, etc ...CDPATH
variable pour gérer lecd
cas.~
. Et~
n'est pas utilisé comme une commande.CDPATH
est que cela ne fonctionne pas pour les commandes en dehors de .... CD. IE vous pourriezcd ~~
oucd ~~/testdir1
vous ne pourriez pasvim ~~testdir1
alias cd~='HOME=$OTHER_HOME; home(){ cd -- "$1"; HOME=~$USER; unset -f home;}; home '