我想~~
指向另一个目录,以便可以将其用作快捷方式。我希望它具有与 完全相同的功能~
。我怎样才能做到这一点?
答案1
其实是有办法的,虽然不是很好的办法,但是也是一个办法,哈哈!
将以下内容添加到您的/etc/passwd
文件中:
~:x:1111:99:special Character user:/test:/sbin/nologin
将 UID替换1111
为有意义的内容,替换/test
为您想要模仿的目录~~
。
99
我的系统上是nobody
组。我建议您这样做以确保它是一个组不对任何将要使用的文件的权限。理论上作为/sbin/nologin
外壳,它不应该能够被使用,它也不会有条目,/etc/shadow
因此它不会有密码。理论上应该没问题,但请确保它不会以某种方式让您以该帐户登录。
附带说明:我并不是说这是一个好主意,但它会实现您想要的功能。
编辑:为了完整起见,这是@VarunAgw 建议的:
您可以像平常一样添加用户useradd -s /sbin/nologin -N tmp
,然后修改/etc/passwd
和更改/etc/shadow
用户并更改主目录的位置。tmp
~
答案2
您可以利用 CDPATH 并~~
在 CDPATH 组件之一中放置一个按字面命名的目录。
来自man bash
(但 CDPATH 即使在 中也可用sh
)
cd 命令的搜索路径。这是一个以冒号分隔的目录列表,shell 在其中查找 cd 命令指定的目标目录。示例值为“.:~:/usr”。
那会让你做的cd ~~
。
如果你想vi ~~/someFile
从目录树中的任何地方做类似的事情,那么如果你坚持字面意思,那么你就不走运了,~~
除非你破解你的 shell,但是,你可以使用变量或环境变量来存储你的魔法目录,这样你就可以做,例如,$tilda/someFile
我通常将经常访问的文件放在主目录中简短命名的目录中,以便我可以使用~/b
或等路径访问它们~/l
。
当然,您通常可以根据需要用目录的符号链接替换目录。
答案3
壳的~
波浪线展开式为大多可编程的。它扩展到在其尾随上下文中声明的系统用户名的用户目录(并且已经提供了沿着这些思路的优秀解决方案),shell 变量的值$HOME
,或者一点也不。
所以:
(HOME=/tmp; cd ~)
pwd; echo "$HOME"
/tmp
/home/mikeserv
我$HOME
一直在改变,并且在 shell 的环境文件中保留一个函数来重置它:
home(){
HOME=~$USER
cd ~; pwd
}
如果您想~
以某种不引用您的主目录的方式使用波浪号,那么这样做。只需重新分配即可$HOME
。不要害怕它。$HOME
只是一个像其他变量一样的 shell 变量。
我的另一个建议只是对 @PSkocik 关于使用$CDPATH
.不过,他没有提到的一件事是,您可以使用和更改内联,而根本$CDPATH
不需要更改当前的 shell 值。$CDPATH
例如:
mkdir -p /tmp/1/2
CDPATH=/tmp cd 1/2
/tmp/1/2
cd
必然是 shell 内置的,但它不是 POSIX特别的shell 内置,因此声明 for 的值$CDPATH
不会影响其当前的 shell 值。如果您像我上面那样使用它,则$CDPATH
值只会根据一个cd
命令的环境而改变,然后恢复到之前的值。我倾向于发现上述技术在与历史记录补全结合使用时最有用。我将执行上述操作,更改为目录,运行一些命令,然后按向上键,直到回到我的cd
命令并退格一两个路径段以移动到其他地方。
现在,如果您将这两个概念结合起来,那么您可以使以前使用过的命令在下次使用时具有完全不同的含义。
for HOME in /tmp ~
do mkdir -p ~/1/2
CDPATH=~ cd 1/2
done
/tmp/1/2
/home/mikeserv/1/2
答案4
与 bash 函数完美配合:
$ function ~~ { cd /tmp; }
$ pwd
/home/jackman
$ ~~
$ pwd
/tmp
$ cd -
$ pwd
/home/jackman
这是另一种更接近的方法(我知道我没有那么接近要求)
function ~~ { echo /test; }
然后还有几个角色:
cd `~~`/subdir
vi `~~`/file