首页 > 解决方案 > ZSH Alias 会触发终端通知程序,但不会触发生成它的命令

问题描述

好的,所以我几天前问了这个问题,但有点搞砸了,所以我删除了它,并打算再次尝试寻求帮助......

我的 .zshrc 中有一个别名;

alias gulp='gulp-notice'

这又会触发一个函数;

gulp-notice ()
{
  notifier-around gulp "Gulp" "gulp $*"
}

进而触发此功能

notifier-around ()
{
  GROUP_ID=$1
  TITLE=$2
  COMMAND=$3 $4 $5 $6 $7 $8 $9
  terminal-notifier -title $COMMAND -message 'Finished' -appIcon https://s-media-cache-ak0.pinimg.com/564x/b5/5a/18/b55a1805f5650495a74202279036ecd2.jpg && terminal-notifier -title $COMMAND -message 'Complete' -appIcon https://s-media-cache-ak0.pinimg.com/564x/b5/5a/18/b55a1805f5650495a74202279036ecd2.jpg || terminal-notifier -title $COMMAND -message 'Failed' -appIcon https://media3.giphy.com/media/10ECejNtM1GyRy/200_s.gif
}

所以变量是这样计算的(使用 gulp-notice 函数)

GROUP_ID is gulp
TITLE is "Gulp" (without the quote marks)
COMMAND is "gulp $*" (the output without the quote marks)

现在我的问题是......当我过去在 BASH 中运行这个脚本时,它会执行 gulp 命令,并且终端通知程序会做这件事(告诉我 gulp 是失败还是成功)

gulp

gulp会根据情况触发和必要的通知

gulp sass

gulp sass会根据情况触发和必要的通知

现在我已经转移到 ZSH,脚本只是触发终端通知,没有别的。有人能指出我正确的方向吗,因为我不明白为什么两个终端应用程序之间的脚本应该如此不同

更新 我现在有工作代码,但我无法运行诸如 SASS 或 JS(gulp sassgulp js)之类的 gulp 任务。我修改后的代码如下

notifier-around ()
{
  GROUP_ID=$1
  TITLE=$2
  COMMAND="$3 $4 $5 $6 $7 $8 $9"
  COMMAND_NO_WHITE_SPACE="$(echo -e "${COMMAND}" | sed -e 's/[[:space:]]*$//')" //strips the white space from the end of the VAR
  PROGRESS="https://s-media-cache-ak0.pinimg.com/564x/b5/5a/18/b55a1805f5650495a74202279036ecd2.jpg"
  FAIL="https://media3.giphy.com/media/10ECejNtM1GyRy/200_s.gif"
  terminal-notifier -group "$GROUP_ID" -title "$TITLE" -message "Starting" -appIcon "$PROGRESS" && $COMMAND_NO_WHITE_SPACE && terminal-notifier -group "$GROUP_ID" -title "$TITLE" -message "Complete" -appIcon "$PROGRESS" || terminal-notifier -group "$GROUP_ID" -title "$TITLE" -message "Failure" -appIcon "$FAIL"
}

gulp-notice ()
{
  notifier-around gulp "Gulp Build" "gulp $*"
}

alias gulp='gulp-notice'

关于如何让它识别附加任务的任何想法,因为我也无法运行gulp --tasks......

标签: functiongulpshzshzshrc

解决方案


所以我终于修好了;

notifier-around ()
{
  GROUP_ID="$1"
  TITLE="$2"
  COMMAND="$3"
  COMMAND_NO_WHITE_SPACE="$(echo -e "${COMMAND}" | sed -e 's/[[:space:]]*$//')" //strips the white space from the end of the VAR
  PROGRESS="https://s-media-cache-ak0.pinimg.com/564x/b5/5a/18/b55a1805f5650495a74202279036ecd2.jpg"
  FAIL="https://media3.giphy.com/media/10ECejNtM1GyRy/200_s.gif"
  terminal-notifier -group "$GROUP_ID" -title "$TITLE" -message "Starting" -appIcon "$PROGRESS" && "${=COMMAND_NO_WHITE_SPACE}" && terminal-notifier -group "$GROUP_ID" -title "$TITLE" -message "Complete" -appIcon "$PROGRESS" || terminal-notifier -group "$GROUP_ID" -title "$TITLE" -message "Failure" -appIcon "$FAIL"
}

gulp-notice ()
{
  notifier-around gulp "Gulp Build" "gulp $*"
}

alias gulp='gulp-notice'

您会看到我正在删除尾随空格; COMMAND_NO_WHITE_SPACE="$(echo -e "${COMMAND}" | sed -e 's/[[:space:]]*$//')"因为这似乎引起了问题

您还会看到我更改"$COMMAND_NO_WHITE_SPACE""${=COMMAND_NO_WHITE_SPACE}"The ${=is to split a variable by $IFS。这给了 ZSH 它需要识别的能力 我正在尝试向我的命令添加一个参数


推荐阅读