Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

aws_vault prompt not working on macOS: date does not accept the options #310

Open
krissrex opened this issue Oct 8, 2021 · 0 comments
Open

Comments

@krissrex
Copy link
Contributor

krissrex commented Oct 8, 2021

Environment: macOS Big Sur 11.6
Tl;dr: macOS has Unix date, bobthefish assumes Linux date.


There 2 problems:

set -l now (date --utc +%s)

set -l expiry (date -d "$AWS_SESSION_EXPIRATION" +%s)

Enabling the theme_display_aws_vault_profile results in:

date: illegal option -- -
usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
            [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]

This is because date on macOS (unix) behaves differently from Linux:

date --utc +%s
date: illegal option -- -
usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
            [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]

Potential solution:
I assume the -u flag works on a regular linux install. It also works on macOS:

date -u +%s
1633680739

set -l expiry (date -d "$AWS_SESSION_EXPIRATION" +%s)

Second problem: date does not like the -d flag.

date -d 2021-10-08T09:15:15Z +%s
usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
            [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]

man date says the following (unix date):

-d dst Set the kernel's value for daylight saving time. If dst is non-zero, future calls to gettimeofday(2) will return a non-zero for tz_dsttime.

I did not find an appropriat option for this for mac's date.
However, macOS has gdate if coreutils are installed (brew install coreutils), and this works like linux's date.

So the fix may be to use gdate on macOS.

set -l now (gdate --utc +%s)
set -l expiry (gdate -d "$AWS_SESSION_EXPIRATION" +%s)

The best solution would not require installing anything extra.


Relevant on this topic: https://www.shell-tips.com/linux/how-to-format-date-and-time-in-linux-macos-and-bash/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant