如何使用代字号作为我的主目录的快捷方式?

Modified on: Sat, 09 Jun 2018 15:44:23 +0800

我很困惑,试图将一些文件从一台PC复制到另一台PC。我弄清楚了,但语法仍然让我感到困惑。
这有效:

scp ~/Desktop/Volenteer.png jay@server.ip:~j0h/b

Volenteer.png放入/home/j0h/b文件夹中。但是,这不起作用:

scp ~Desktop/Volenteer.png     jay@server.ip:~j0h/b

这也失败了,没有找到退出状态1文件:

scp ~/Desktop/Volenteer.png     jay@server.ip:~/j0h/b

就像这样:

scp ~Desktop/Volenteer.png     jay@server.ip:~j0h/b

很明显,~~/之间存在一些差异
这种差异是/

的存在

$~/ bash: /home/j0h/: Is a directory $ ~ bash: /home/j0h: Is a directory

那么为什么在scp中,~是否解析为~/
这是一个猜测,我无法证实这是发生了什么。
但它似乎不一致,因此令人困惑。
这是scp中的错误吗?还是有什么关于代字号的东西我不见了?

最佳答案

~是您的主目录。

~foo是用户foo的主目录,如果这样的用户存在,或者只是一个名为~foo的目录,如果是用户不存在。


因此,在:

scp ~Desktop/Volenteer.png     jay@server.ip:~j0h/b

~Desktop将扩展到用户Desktop的主目录,如果这样的用户存在(通常不存在),或者只是~Desktop


在:

scp ~/Desktop/Volenteer.png     jay@server.ip:~/j0h/b

~/j0h将扩展到j0h主目录中名为jay的目录,该目录也不太可能存在。


不是~~/,而是在~~foo中。< / p>


此外,~也可用于目录历史导航:

  • ~-是以前的工作目录(如$OLDPWD
  • ~+是当前的工作目录(如$PWD

这不适用于scp,因为您无法在scp操作中更改目录。

如果您使用pushdpopd来维护目录堆栈,~<em>N</em>~+<em>N</em>将是 N 目录堆栈中的目录,如dirs的输出中所示。 ~-<em>N</em>将是结尾的 N 目录(在两种情况下从零开始计算)。例如:

$ for i in etc usr var tmp; do pushd /$i; done
/etc ~/.vim
/usr /etc ~/.vim
/var /usr /etc ~/.vim
/tmp /var /usr /etc ~/.vim

$ dirs
/tmp /var /usr /etc ~/.vim

然后,可以使用以下方法访问堆栈中的目录:

/tmp /var /usr /etc ~/.vim
  ~0   ~1   ~2   ~3     ~4
 ~+0  ~+1  ~+2  ~+3    ~+4
 ~-4  ~-3  ~-2  ~-1    ~-0 
  ~+   ~-
作者:Community,muru

相关问答

添加新评论