penguin/utils

my env utils

commit d8bcf8dfb225f7e33adf39452145416c1b035456

author斟酌 鵬兄 <tgckpg@gmail.com>
date2026-07-22T04:49:02Z
subjectAdded pbcopy for linux
commit d8bcf8dfb225f7e33adf39452145416c1b035456
Author: 斟酌 鵬兄 <tgckpg@gmail.com>
Date:   2026-07-22T04:49:02Z

    Added pbcopy for linux
---
 bash/dist/rbashrc                |  2 +-
 bash/dist/rbashrc.asc            | 10 +++++-----
 bash/dist/sources.list           |  2 +-
 bash/sources/42_clipboard_server | 36 ++++++++++++++++++++++++++++++++++--
 4 files changed, 41 insertions(+), 9 deletions(-)

diff --git a/bash/dist/rbashrc b/bash/dist/rbashrc
index 82ce5a5..bdc5eea 100755
--- a/bash/dist/rbashrc
+++ b/bash/dist/rbashrc
@@ -18,7 +18,7 @@ RBASH_CONFIG="$RBASH_HOME/config"
 RBASH_ENV="$RBASH_HOME/env"
 RBASH_MERGED="$RBASH_CACHE_DIR/merged"
 RBASH_BIN="$RBASH_HOME/bin"
-RBASH_SOURCES_SUM="5b9bfb105ab2fbc2e26b2ba526b2f61862ea26559d8626d52e37b535ac17f1dd"
+RBASH_SOURCES_SUM="61835cc27d7685e8c77479d6e129da27876e67750ae33b84bbd304ae94b3d327"
 
 
 # ---- rbash: bash/core/00_env.bash ----
diff --git a/bash/dist/rbashrc.asc b/bash/dist/rbashrc.asc
index b07591b..32d4ca0 100644
--- a/bash/dist/rbashrc.asc
+++ b/bash/dist/rbashrc.asc
@@ -1,8 +1,8 @@
 -----BEGIN PGP SIGNATURE-----
 
-iJEEABYKADkWIQR8HpSNhBJUxWnt+97Vz1+xz60nwwUCal4+HxsUgAAAAAAEAA5t
-YW51MiwyLjUrMS4xMiwwLDMACgkQ1c9fsc+tJ8MiWAEAqFM3KDUJNeDHoUgw+C5s
-xrsjyFAbv7CSu1c/PRxVxi4A/1F/iAbNgGzFd3WR7stRMtTLS2gLehI7o4Pfnvwc
-PQIK
-=G4BQ
+iJEEABYKADkWIQR8HpSNhBJUxWnt+97Vz1+xz60nwwUCamBLnRsUgAAAAAAEAA5t
+YW51MiwyLjUrMS4xMiwwLDMACgkQ1c9fsc+tJ8PzHgEAyhtngzSz/8tTukR7oMsw
+lSX0bmNExmi0IDvmS3PacS4A/A7nVaPtWnAFP0lKIDeJu0rbRNlY0hAjHP/MBIIh
+KKcN
+=HQN4
 -----END PGP SIGNATURE-----
diff --git a/bash/dist/sources.list b/bash/dist/sources.list
index e71d1a7..1a0841c 100644
--- a/bash/dist/sources.list
+++ b/bash/dist/sources.list
@@ -13,5 +13,5 @@ b5a488efc0558e2b795a1558e2c91a8aeecc3fd441d437aff3a4749d5eb0bdfc  sources/23_win
 5dbc166ce1b051b54d244ef5dc6b52dfbff03965e9abb0ed891d441dffbf8a76  sources/31_git-utils
 c9c270376844e7c7e3c48b1e86c2ce3e7824dde64e8724c17c5fc95910abd11c  sources/40_go-command
 c0e8ef70466063907b5ed9e52c13532b0019b8cb5975d020899804549a76a37f  sources/41_pivot-command
-27466917308d3a1891937d3c7cdb11f31488f886cb0fecf656c720eec065a05c  sources/42_clipboard_server
+9218459bd0245a83afa467d71437a6a8cebb387c89fc33551f857a351074eeb0  sources/42_clipboard_server
 d02be2a68e8bd1f7e5adacbdd0bdc4f426aabfa1a57709270b673617db6c5352  sources/60_diagnostics
diff --git a/bash/sources/42_clipboard_server b/bash/sources/42_clipboard_server
index e7d2059..247c0ae 100644
--- a/bash/sources/42_clipboard_server
+++ b/bash/sources/42_clipboard_server
@@ -98,13 +98,45 @@ function sshc {
 		"$@"
 }
 
-cleanup_ssh_clipboard() {
+function pbcopy {
+	if [ -n "${SSH_CLIPBOARD_REMOTE_SOCKET:-}" ] &&
+		[ -S "$SSH_CLIPBOARD_REMOTE_SOCKET" ]; then
+
+		command -v socat >/dev/null 2>&1 || {
+			echo "pbcopy: socat is required for the remote clipboard" >&2
+			return 1
+		}
+
+		socat - "UNIX-CONNECT:$SSH_CLIPBOARD_REMOTE_SOCKET"
+		return $?
+	fi
+
+	case "$OSTYPE" in
+		darwin*)
+			if [ -x /usr/bin/pbcopy ]; then
+				/usr/bin/pbcopy
+			else
+				echo "pbcopy: /usr/bin/pbcopy was not found" >&2
+				return 1
+			fi
+			;;
+		*)
+			echo "pbcopy: no remote clipboard socket is available" >&2
+			return 1
+			;;
+	esac
+}
+
+function cleanup_ssh_clipboard {
 	[ -n "${SSH_CONNECTION:-}" ] || return
 	[ -S "$SSH_CLIPBOARD_REMOTE_SOCKET" ] || return
 	rm -f -- "$SSH_CLIPBOARD_REMOTE_SOCKET"
 }
 
-if init_clipboard_server; then
+if [ -z "${SSH_CONNECTION:-}" ] && init_clipboard_server; then
 	alias ssh='sshc'
+fi
+
+if [ -n "${SSH_CONNECTION:-}" ]; then
 	trap cleanup_ssh_clipboard EXIT HUP TERM
 fi