Created
December 26, 2022 21:15
-
-
Save osirisgothra/aaa5fb773a4a3bc8aee5a199babff136 to your computer and use it in GitHub Desktop.
set clipboard data with an xclip style script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# an Examples of wclip use | |
# you probably dont want to run this | |
# copy a list of all files in /etc with size, ownership, date, and permissions included | |
ls /etc -l | wclip | |
# copy a list of every positive integer from zero to 100 | |
for ((x=0;x<100;x++)); do echo "$x"; done | wclip | |
# copy a list of every location of 'somefile' from the current directory and all | |
# subdirectories included (may take time depending on where you do this) | |
find -iname 'somefile' | wclip | |
# copy memory statistics, in kilobytes (1024/unit), to clipboard | |
free -k | wclip | |
# copy 'hello wclip' to clipboard :) | |
echo "hello wclip" | wclip |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# wclip (recommended name, original is wclip.sh) | |
# written by Gabriel T. Sharp, Dec 26 2022 | |
# this is a public domain gist | |
# | |
# Summary | |
# | |
# drop-in replacement for SIMPLE xclip operation of sending text to clipboard | |
# arguments are ignored, and mimic that of 'xclip -sel -pri' the one exception being the argument '-tst' (see below). | |
# | |
# Requirements | |
# | |
# 1) Either you must have C:\ mounted on /mnt/c -OR- your subsystem must list the drive letter in the mount table so the regular expression can | |
# pick it up. (ie; J:\ on /mnt/MyWindowsPartitionJ would be matched), if your mount is in /mount, then you must make a symlink to /mnt | |
# This process is usually automatic and no intervention is needed. However if your use is exotic, it might not work for you. | |
# If the drive is not found, the script fails back to /mnt/c and C:\, attempts to check if /mnt/c is writable, and then will go from there. | |
# You can use the argument -tst to see how and if your drives are detected properly. This has so far been verified to work on cygwin and the | |
# ubuntu/linux subsystem for Windows 10 and Windows 11. | |
# 2) You will need windows powershell installed. And it must be executable via 'powershell.exe'. The cmdlets set-clipboard and get-content must be available! | |
# It is up to you to make sure you have these. Since this script gist is for programmers, its likely you know what you are doing. | |
# 3) You need a working egrep, mount, mktemp, cat and bash binaries. | |
# 4) You need either write access to C:\temp, or the privs to make c:\temp, and c:\temp\tmpfile must be available, you can of course change this if you want | |
# The tmpfile is removed after use. | |
# | |
# Notes | |
# | |
# The script caller's /dev/stderr (&2) stream is not read. The script caller's /dev/stdout stream is read as input to redirect to the Windows clipboard. | |
# Errors generated by this script or it's binaries may be output on /dev/stderr or /dev/stdout, be warned. | |
# | |
# There are other better scripts for handling xclip more precisely and adding output (getting the clipboard content) instead, but | |
# they already exist. I wrote this script because the existing scripts I found online did not work seamlessly across versions of linux | |
# subsystem for windows, cygwin, and other shells (and required the installation of tools or running of the scripts from some weird | |
# location that didn't sit well with me). | |
# | |
# Again please note that there are no xclip arguments, other than the '-tst' argument that tests that drive mappings are compatible. | |
# This is public domain, so I do not openly support it. Though feel free to drop me a line if you have questions (it might be some | |
# time before you hear back, depending on where you send your message, my current best contact is through github or [email protected]). | |
# make sure to subject any questions with "QUESTION:" so I know its not spam. Have a nice day! | |
# | |
tmpfile=$(mktemp) | |
mount | egrep '[A-Z]:\\ on /mnt/[A-Za-z]' -o > $tmpfile | |
detdrvs=( $(<$tmpfile) ) | |
if [[ -r ${detdrvs[2]} ]] && [[ "${detdrvs[1]}" == "on" ]]; then | |
declare -g mntloc="${detdrvs[2]}" | |
declare -g sroot="${detdrvs[0]}" | |
if [[ "$1" == "-tst" ]]; then | |
echo "drives were found (test): (mntloc=$mntloc sroot=$sroot)" | |
declare -p detdrvs | |
exit 1 | |
fi | |
else | |
declare -g mntloc="/mnt/c" | |
declare -g sroot="c:\\" | |
if [[ "$1" == "-tst" ]]; then | |
echo "drives were not found (test): failed back to mntloc=$mntloc and sroot=$sroot" | |
exit 2 | |
fi | |
fi | |
if [[ -w $mntloc ]]; then | |
[[ -d "$mntloc/temp" ]] || mkdir -f "$mntloc/temp" || echo "warning, error creating $mntloc/temp" | |
cat > $mntloc/temp/tmpfile | |
powershell.exe get-content c:\\temp\\tmpfile \| set-clipboard | |
rm "$mntloc/temp/tmpfile" | |
else | |
echo "fatal: this works on subsystems that have main drive mounted in /mnt/c" | |
echo " please install or link your root drive at this point!" | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment