我的.bash_profile
中有一个功能,可以将一些预写的文本打印为文本并将其复制到剪贴板。
copyandprint () {
s='\\033[1;32m' #strong
n='\\033[0m' #normal
printf -- "printf -- '$1' | pbcopy;" #pbcopy copies to clipboard in macOS
printf -- "echo -e copied '${s}$1${n}' to clipboard"
}
我用它为我一直希望粘贴到其他应用程序中的东西添加别名,例如静态ID,或者只是难以在键盘上快速键入的愚蠢东西。
alias shrug=$( copyandprint '¯\_(ツ)_/¯')
但是当我想在使用别名时将其与生成的文本一起使用时,我不能仅仅在别名定义中调用它;别名需要调用它。
alias copydate=$( copyandprint "$(date)" )
该值是在脚本运行时生成的,而不是在使用别名时生成的。
通过几乎反复的尝试和错误,我能够对功能进行修改以实现我想要的功能:
copyandprint_live () {
s='\\033[1;32m' #strong
n='\\033[0m' #normal
printf -- "$1" | pbcopy
printf -- "echo -e copied ${s}$1${n} to clipboard"
}
alias copydate_live="\$( copyandprint_live \"\$(date)\" )"
日期是在使用别名时生成的,而不是在执行脚本时生成的。
但是,当我像使用其他函数那样使用该函数时,它将失败:
alias shrug_2=$( copyandprint_live '¯\_(ツ)_/¯')
$ shrug_2
#=> -bash: syntax error near unexpected token `ツ'
我尝试用双引号引起来,但这没用
alias shrug_3=$( copyandprint_live '"¯\_(ツ)_/¯"')
$ shrug_3
#=> copied 033[1
#=> -bash: 32m¯\_(ツ)_/¯033[0m: No such file or directory
答案 0 :(得分:2)
免除了别名并使用函数使此操作变得更加容易。
copyandprint () {
printf '%s' "$1" | pbcopy
printf 'copied \033[1;32m%s\033[0m to clipboard\n' "$1"
}
shrug () {
copyandprint '¯\_(ツ)_/¯'
}
copydate () {
copyandprint "$(date)"
}
功能与其他任何命令一样工作
$ foo () { echo hi; }
$ foo
hi
答案 1 :(得分:0)
您是在定义别名时调用函数的,而不是在使用别名时调用的。您需要将别名定义放在单引号中,以防止$(...)
当时执行命令。
alias shrug='$( copyandprint "¯\_(ツ)_/¯")'