2017-01-26 11 views
-1

Привет, там пытается добавить аргумент в псевдоним в bash. Я использую Mac. Я искал ряд связанных вопросов: Alias in Bash, Alias in Bash with autocomplete и еще несколько человек все еще не могут разобраться в этом. Я знаю, что мне нужно использовать функцию для создания псевдонима, который вводит ввод, но неясно, должно ли оно выглядеть как любой из нижеперечисленных параметров. Все входы в .bash_profile.Псевдоним с аргументом в Bash - Mac

function mins_ago() { `expr $(date +%s) - 60 \* "$1"`; } 

alias mins_ago = function mins_ago() { `expr $(date +%s) - 60 \* "$1"`; } 

alias mins_ago = "function mins_ago() { `expr $(date +%s) - 60 \* "$1"`; }" 

alias mins_ago = function mins_ago() { `expr $(date +%s) - 60 \* $1`; } 

Ничего из этого не работает. Я либо получаю синтаксическую ошибку, либо не распознает аргумент.

Какая фактическая строка вы положили в .bash_profile, чтобы отсортировать ее по-настоящему? Заранее спасибо. Включен ли бит alias или я просто перехожу к определению функции?

+0

Stack Overflow это сайт для программирования и разработки вопросов. Этот вопрос кажется вне темы, потому что речь идет не о программировании или разработке. См. [Какие темы можно задать здесь] (http://stackoverflow.com/help/on-topic) в Справочном центре. Возможно, лучше сказать [Суперпользователь] (http://superuser.com/) или [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/). Также см. [Где я пишу вопросы о Dev Ops?] (Http://meta.stackexchange.com/q/134306) – jww

ответ

2

Определение alias не правильный подход, когда вы можете легко сделать это с функциями, а также использовать bash, арифметический оператор $(())

function mins_ago() { 
    printf "%s" "$(($(date +%s) - (60 * $1)))" 
} 

Добавьте выше функцию в .bash_profile, и сейчас тестирует его в Command- линия,

date +%s 
1485414114 

value="$(mins_ago 3)" 
printf "%s\n" "$value" 
1485413834 

(или) без временной переменной для преобразования в читаемом формате в GNU date, сделать

printf "%s\n" "$(date [email protected]$(mins_ago 3))" 
+0

Я запускаю то, что вы разместили выше. Ах! 'источник ~/.bash_profile' по какой-то причине не принимался, но выход и попытка снова работали. Спасибо, сэр. – HectorOfTroy407

+0

@ HectorOfTroy407: Рад помочь! – Inian

0

типа Just

mins_ago() { 
`expr $(date +%s) - 60 \* "$1"`; 
} 

Он работает для GNU Баша 4.1.2:

$ mins_ago 5 
bash: 1485411776: command not found 

Чтобы избежать ошибок, используйте эхо:

mins_ago() { 
echo `expr $(date +%s) - 60 \* "$1"` 
} 
+0

Вместо добавления 'echo' удалите обратные кавычки. –

+0

'-bash: /Users/CloudFlare/.bash_profile: строка 13: синтаксическая ошибка около неожиданного токена' {'expr $ (date +% s) - 60 \ * $ 1' ' -bash: /Users/CloudFlare/.bash_profile : строка 13: 'function _hours() {' expr $ (date +% s) - 60 \ * $ 1';} _hours '' когда я пытаюсь 'mins_ago() { expr $ (date +% s - 60 \ * «$ 1»; } ' – HectorOfTroy407

+0

@ HectorOfTroy407: Можете ли вы попробовать мой ответ выше? – Inian

0

Удалить кавычку из ваших первых попробуйте, и с вами все будет в порядке.

Затем функция выведет временную метку, и вы можете написать echo "$(mins_ago)".

1

добавить это к вашему .bashrc и источник его

mins_ago() { 
    if [[ [email protected] != "" ]]; then 
    command expr $(date +%s) - 60 \* "[email protected]" 
    else 
    command echo "command error: mins_ago <integer>" 
    fi 
} 

выход:

$ mins_ago 1 
1485414404 
$ mins_ago 
command error: mins_ago <integer>