Bash

管道到 xclip 時沒有新行

  • August 8, 2022

有什麼我可以做的,這樣每當我將某些東西輸入xclip其中時,最後都不包含新行嗎?

作為一種解決方法,我正在使用echo -n $(CMD_TO_COPY) | xclip,但是每次我想複製某些內容時都必須輸入所有這些內容有點煩人。

根據手冊頁,xclip有一個-rmlastnl( -r) 選項可以完全滿足您的要求:

echo hello | xclip -i -r

儘管xclip由於 0.13 版確實可以選擇刪除尾隨換行符,正如 larsks 已經指出的那樣,但您也可以始終定義一個執行您想要的處理的函式,例如:

clipboard() { printf %s "$(cat -- "$@")" | xclip -sel c; }
clipboard() { printf %s "$(cat -- "$@")" | xsel -b; }

(在這裡,命令替換會刪除所有尾隨換行符,並且在某些 shell 中,包括bash,也包括所有 NUL )。

或者像這樣只刪除一個尾隨換行符xclip -r

clipboard() { cat -- "$@" | perl -pe 's/\n$// if eof' | xclip -sel c; }

並用作:

cmd | clipboard
clipboard <<< "$var"
clipboard some-file and-some-other

在任何情況下,在您的方法中使用echo或不帶引號的命令替換*echo -n $(CMD_TO_COPY)*都是不正確的。

引用自:https://unix.stackexchange.com/questions/712879