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, скрипт ПРОСТО запускает уведомление терминала и ничего больше. Может ли кто-нибудь указать мне правильное направление, поскольку я не понимаю, почему сценарии должны быть такими разными между двумя терминальными приложениями.

ОБНОВЛЕНИЕ Теперь у меня есть рабочий код, но я не могу запускать gulp-задачи, такие как SASS или JS (gulp sass или gulp js). Мой пересмотренный код выглядит следующим образом

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...


person Takuhii    schedule 05.07.2019    source источник
comment
Как я упоминал в вашем последнем вопросе, это должно быть COMMAND="$3 $4 $5 $6 $7 $8 $9"; в противном случае вы пытаетесь запустить $4 с аргументами $5, ..., $9 в среде, где COMMAND=$3 и COMMAND не установлены при запуске terminal-notifier.   -  person chepner    schedule 05.07.2019
comment
Спасибо @chepner, я не публиковал повторно, чтобы быть грубым, я думаю, что просто испортил исходный вопрос. Ваши отзывы, как всегда, бесценны :)   -  person Takuhii    schedule 05.07.2019
comment
Итак, код теперь работает, но я вернулся к своему старому другу notifier-around:5: command not found: gulp. Теперь мой PATH включает /usr/local/bin, где живет GULP, но даже если я явно укажу /usr/local/bin/gulp в функции, она все равно скажет мне, что не может найти GULP. Если я выполняю /usr/local/bin/gulp без активной функции, все работает нормально... Есть идеи?   -  person Takuhii    schedule 05.07.2019
comment
@Takuhii: я не вижу в вашем коде, где вы на самом деле вызывали бы /usr/local/bin/gulp. В частности, вы никогда не оцениваете $COMMAND. Будет полезно, если вы запустите весь вызов под set -x, чтобы мы могли видеть, что происходит.   -  person user1934428    schedule 08.07.2019
comment
Извините, я, вероятно, не очень хорошо это объяснил... Мой скрипт сам выполняет gulp, поскольку он должен исходить из местоположения в моей переменной PATH... если я запускаю gulp вне функции, то есть вручную, он работает нормально ... Это почти как zsh запускает мою функцию в песочнице, и я не могу взаимодействовать с внешним миром. Я думал, что это может быть iTerm2, но я не знаю... Я запущу set -x и опубликую свои результаты...   -  person Takuhii    schedule 08.07.2019
comment
Это был пробел, порожденный отсутствием переменной   -  person Takuhii    schedule 08.07.2019
comment
Но теперь я обнаружил другую проблему   -  person Takuhii    schedule 08.07.2019


Ответы (1)


Итак, я наконец исправил это;

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}" ${= означает разделение переменной по $IFS. это дает ZSH пинок под зад, который он должен распознать. Я пытаюсь добавить параметр в свою команду.

person Takuhii    schedule 08.07.2019