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?
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?
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:
~:x:1111:99:special Character user:/test:/sbin/nologin
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 le nobody
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'utilisateur tmp
de ~
changer l'emplacement duhome directory
useradd 'tmp'
et ensuite remplacer tmp
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 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 ~~/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.
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:
(HOME=/tmp; cd ~)
pwd; echo "$HOME"
/tmp
/home/mikeserv
Je change $HOME
tout 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. $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:
mkdir -p /tmp/1/2
CDPATH=/tmp cd 1/2
/tmp/1/2
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 seule cd
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 à ma cd
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.
for HOME in /tmp ~
do mkdir -p ~/1/2
CDPATH=~ cd 1/2
done
/tmp/1/2
/home/mikeserv/1/2
Fonctionne parfaitement bien comme fonction bash:
$ function ~~ { cd /tmp; }
$ pwd
/home/jackman
$ ~~
$ pwd
/tmp
$ cd -
$ pwd
/home/jackman
Voici une autre approche qui se rapproche un peu (je sais que je ne me rapproche pas autant des exigences)
function ~~ { echo /test; }
Puis avec quelques autres personnages:
cd `~~`/subdir
vi `~~`/file
cd ~~/foo/bar
ça ne va pas si bien fonctionner, ou vim ~~/foo.txt
, etc ...
CDPATH
variable pour gérer le cd
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 pourriez cd ~~
ou cd ~~/testdir1
vous ne pourriez pasvim ~~testdir1
alias cd~='HOME=$OTHER_HOME; home(){ cd -- "$1"; HOME=~$USER; unset -f home;}; home '