How to copy a string to the clipboard from a script?
CopyToClipboard[]
requires a FrontEnd to work.
Proof:
In: Trace[CopyToClipboard["hi"]]
Out: {CopyToClipboard[hi],MathLink`CallFrontEnd(FrontEnd`CopyToClipboard(System`FEDump`makeCopyBoxes(hi))),{{System`FEDump`makeCopyBoxes(hi),hi},FrontEnd`CopyToClipboard(hi)},MathLink`CallFrontEnd(FrontEnd`CopyToClipboard(hi)),Null}
However, you can (sort of roundaboutly) run the shell inside wls
and copy it using your system's clipboard tool.
#!/usr/bin/env wolframscript
string = "word";
RunProcess[{"bash", "-c", "echo '" <> string <> "'|pbcopy"}]
This copies string
to the clipboard.
Additionally, Paste[]
requires the FrontEnd, but there's a similar workaround. All together (name from @ConorCosnett):
#!/usr/bin/env wolframscript
string = "Programming is fun!";
copyToClipboardFromString[string_]:=RunProcess[{"bash", "-c", "echo '" <> string <> "'|pbcopy"}]
getClipboard[]:=RunProcess[{"bash", "-c", "pbpaste"}, "StandardOutput"]
copyToClipboardFromString[string]
Print[getClipboard[]]
Implemented on macOS. See here for implementations in Ubuntu (thanks to @ConorCosnett).
Wrapping the CopyToClipboard[]
in a UsingFrontEnd[]
allows us to use it in scripts:
#!/usr/bin/env wolframscript
string = "Pshhhkkkkkrrrrkakingkakingkakingtshchchchchchchchchdingdingding";
UsingFrontEnd[CopyToClipboard[string]];
If a FrontEnd is already running you may have to quit it, and then rerun this script
Windows 10 implementation
To simply steal from the answers of @conorcosnett and @maxcoplan the following seems to work for Windows:
string = "word";
Run["echo " <> string <> " | clip"];