如何在UNIX中复制文件内容而不显示文件内容。我不想让cat或vi看到其中的内容。
我想将它们复制到剪贴板,以便可以将其粘贴回Windows记事本中。
由于访问限制,我无法将该文件从该服务器复制到另一个服务器。
如何在UNIX中复制文件内容而不显示文件内容。我不想让cat或vi看到其中的内容。
我想将它们复制到剪贴板,以便可以将其粘贴回Windows记事本中。
由于访问限制,我无法将该文件从该服务器复制到另一个服务器。
Answers:
如果使用X11(在传统的基于Unix或Linux的系统上最常见的GUI),要不显示文件就将文件内容复制到X11 CLIPBOARD选择中,则可以使用xclip
或xsel
实用程序。
xclip -sel c < file
要么:
xsel -b < file
要存储的内容file
作为CLIPBOARD X11的选择。
请注意,应使用UTF-8编码进行存储,否则粘贴将无法正常进行。如果file
使用其他字符集对进行编码,则应首先转换为UTF-8,例如:
iconv -f latin1 -t utf8 | xclip -sel c
对于以latin1 / iso8859-1编码的文件。
要将其存储为CUT_BUFFER(某些应用程序仍会查询这些内容,例如xterm
当没有人声明CLIPBOARD或PRIMARY X选择并且不需要运行诸如选择之类的服务来运行它时),尽管您可能不想或现在需要使用:
xprop -root -format CUT_BUFFER0 8s -set CUT_BUFFER0 "$(cat file)"
(从中删除尾随换行符file
)。
GNU screen
具有将readbuf
文件内容插入其自己的复制粘贴缓冲区(使用粘贴^A]
)的命令。所以:
screen -X readbuf file
尽管Apple OS / X 可以使用X11。除非您运行X11应用程序,否则默认情况下它不会。您将可以使用xclip
或xsel
在此处使用OS / X,因为OS / X应该将X11 CLIPBOARD选择与OS / X粘贴板缓冲区同步,但是仅仅为此目的而启动X11服务器会有些浪费。
在OS / X上,可以使用以下pbcopy
命令将任意内容存储到粘贴板缓冲区中:
pbcopy < file
(文件的字符编码应为语言环境的字符编码)。
大多数外壳程序都有自己的复制粘贴缓冲区。在emacs模式下,剪切和复制操作将复制/剪切的文本存储到堆栈中,您可以使用将该堆栈剪切/粘贴Ctrl-Y,然后使用循环遍历Alt+Y
在中zsh
,堆栈存储在$killring
数组中,堆栈的顶部存储在$CUTBUFFER
变量中,尽管这些变量仅可从Zsh Line Editor(zle)小部件获得,并且一些特殊的小部件是处理这些变量的首选方式。
由于这些只能通过ZLE获得,因此使用命令进行操作有点费解:
zmodload zsh/mapfile
zle-line-init() {
if [ -n "$FILE_TO_COPY" ]; then
zle copy-region-as-kill $mapfile[$FILE_TO_COPY]
unset FILE_TO_COPY
fi
}
zle -N zle-line-init
file-copy() FILE_TO_COPY=$1:A
该zle-line-init
特殊部件在每个新的命令提示符的开始执行一次。这意味着该文件仅在下一个提示符下被复制。例如,如果您这样做:
file-copy file; sleep 2
仅在这2秒钟后复制文件。
Error: Can't open display: (null)
xclip
并且xsel
是X11事业,他们操纵X11的选择,所以只能在一个X11环境中使用$DISPLAY
设置。
也许你想问这个。但是您要读取的任何文件都必须通过某些系统调用来打开。如果您无权访问文件,则无法阅读。那就是限制访问的想法。