Как использовать мои псевдонимы в моем crontab?

У меня есть несколько команд в моем .profile что я хочу призвать из моего crontab,

Например, если у меня есть,

alias notify-me="~/bin/notify.pl -u user1"
alias notify-team="~/bin/notify.pl -u user1 user2 user3 user4 ...."

Я хотел бы просто использовать псевдоним

0 11 * * * notify-team

так что если список в моем .profile обновлено, мне не нужно обновлять crontab, тоже. Тем не менее, я не могу использовать псевдонимы в моем crontab, Есть ли работа вокруг?

Я попробовал здесь предложения по настройке среды (например, /bin/bash -lc и скрипт script-wrapper). Кажется, что это работает для сценариев, но не псевдонимов.

Есть идеи?

6 ответов

Из справочной страницы по псевдонимам:

Обратите внимание, псевдонимы не раскрываются по умолчанию в неинтерактивной оболочке,
и это может быть включено, установив 'expand_aliases'
Вариант оболочки с использованием Shopt.

Так что попробуйте использовать shopt -s expand_aliases в начале вашего сценария поиска. Это должно позволить вам использовать предложение Уорнера.

bash -c с "источником" должен работать:

0 11 * * * bash -c "source .profile && notify-team"

это может также работать. период означает "источник"

0 11 * * * . .profile && notify-team

Как определил Крис, опция оболочки по умолчанию для неинтерактивных оболочек - не раскрывать псевдонимы. Вот решение, которое я нашел для работы.

Напишите сценарий, включите параметр оболочки и укажите псевдонимы. Будьте особенно осведомлены, что .bashrc исходный код при выполнении, поэтому он должен быть получен снова после включения функции расширения.

Мои извинения за изначально неверную рекомендацию. Это было более неясным, чем я первоначально ожидал.

Автор сценария:

#!/bin/bash
shopt -s expand_aliases
source /home/wmoore/.bashrc
notify-team

Мне нравится идея Artifex извлечь псевдоним из файла и затем использовать его повторно, поскольку я не смог найти способ расширения / повторного использования псевдонимов напрямую. (Другие решения все еще требовали другого сценария.)

Поэтому я написал эту функцию и поместил ее в свой.profile:

grab-alias () { sed -n '/alias\s*'$1'\s*=/ {s/[^'\'']*.//;s/'\''\s*$//p}' /home/bentrupk/.profile; }

Затем я смог использовать его в моем crontab для различных псевдонимов, например:

0 11 * * * /bin/bash -lc 'x=`grab-alias notify-team`; $x'
0 7 * * * /bin/bash -lc 'x=`grab-alias notify-me`; $x'

и т.п.

Ух, повторное использование кода! Спасибо всем.

На самом деле самое простое, что вы могли бы сделать, это создать

~ / bin / notify-me with

#!/bin/sh
~/bin/notify.pl -u user1

~ / bin / notify-team with

#!/bin/sh
~/bin/notify.pl -u user1 user2 user3 user4 ....

Как вы уже видели, псевдонимы оболочки сложно поддерживать и интегрировать в другие системы. Лучшее, что можно сделать, это превратить их в полноценные команды, которые не будут иметь проблем с окружением.

Bash -ic "notify-team" - лучший вариант. Это делает псевдоним доступным в crontab. Вы также можете добавить & для фона, поскольку мы используем "интерактивную" оболочку с -i, но на самом деле не взаимодействуем с ней.

0 11 * * * bash -ic "notify-team" > /log/file

работает для меня

Другие вопросы по тегам