Skip to content

Running shell scripts that wrapped CLIs #120

Closed

Description

@martijnarts

op CLI version

2.10.0

Goal or desired behavior

I have a shell script that runs doctl, something like:

#!/usr/bin/env bash

doctl account get

Current behavior

It currently will output:

$ ./bin/test.sh
Error: GET https://api.digitalocean.com/v2/account: 401 (request "...") Unable to authenticate you

It should just work, though.

Relevant log output

No response

Activity

  1. added
    op-cliFunctionality to be implemented in 1Password CLI. Needs to be done by 1Password Developers.
    on Dec 19, 2022
  2. martijnarts commented on Dec 19, 2022

    @martijnarts
    Author

    Workaround is replacing the line with op plugin run doctl account get

  3. mrjones2014 commented on Dec 19, 2022

    @mrjones2014
    Member

    I think this is because the #!/usr/bin/env bash shebang line causes it to run in a subshell in which ~/.config/op/plugins.sh would not have been sourced.

    As far as I know there isn't really any way around this other than having your script check if ~/.config/op/plugins.sh exists, and if so, source it again.

  4. mrjones2014 commented on Dec 19, 2022

    @mrjones2014
    Member

    Alternatively, you could write it as a shell function in your ~/.bashrc/~/.zshrc/~/.config/fish/config.fish instead of having it be a script.

    e.g. for bash/zsh

    mydoctlalias() {
      doctl account get
    }

    or for Fish shell:

    function mydoctlalias
      doctl account get
    end

    This way it would run in the current shell instead of a subshell and therefore your aliases from ~/.config/op/plugins.sh would be respected.

  5. martijnarts commented on Dec 19, 2022

    @martijnarts
    Author

    Yeah, I figured that would be the problem. It might be worth adding something like this to the dev documentation.

  6. cussiol commented on Dec 23, 2022

    @cussiol

    Those workarounds only work when you can modify the script. As 1Password Shell Plugins are based on alias, it seems a significant limitation for actual usage.

    It is worth to think an alternative official way to make it work.

    One way I thought is something like op plugins run <plugins> -- ./script

  7. SimonBarendse commented on Jan 6, 2023

    @SimonBarendse
    Member

    I think this is because the #!/usr/bin/env bash shebang line causes it to run in a subshell in which ~/.config/op/plugins.sh would not have been sourced.

    This is correct. Furthermore, 1Password Shell Plugins are (currently) build to be used in interactive shells. Besides the problem you're now running into of the aliases not having been sourced, the plugin might also need to prompt (e.g. when you don't have a default credential configured), which is only possible in an interactive terminal.


    I agree with both these comments:

    It might be worth adding something like this to the dev documentation.

    Those workarounds only work when you can modify the script. As 1Password Shell Plugins are based on alias, it seems a significant limitation for actual usage.
    It is worth to think an alternative official way to make it work.

  8. martijnarts commented on Jan 6, 2023

    @martijnarts
    Author

    I start all my scripts with this now:

    if ! [ -x "$(command -v op)" ]; then
        echo >&2 "Error: 1Password CLI not installed, find it at: https://developer.1password.com/docs/cli/get-started#install"
        exit 1
    fi
    
    export OP_ACCOUNT=$(op account list | grep '<SOMETHING>.1password.com' | awk '{print $3}')
  9. SimonBarendse commented on Jan 6, 2023

    @SimonBarendse
    Member

    As an alternative workaround for now that doesn't require you to change your scripts, you could use a shim: create a file in your $PATH named doctl with the following contents:

    op plugin run /usr/local/bin/doctl
    

    It needs to have exec permissions (chmod +x) and it needs to take precedence in your path over the actual doctl binary

  10. cussiol commented on Feb 9, 2023

    @cussiol

    @SimonBarendse I tried that workaround but got an error:

    $ op plugin run -- /usr/local/bin/aws
    [ERROR] 2023/02/09 01:58:06 unknown plugin: /usr/local/bin/aws
    $ op plugin run /usr/local/bin/aws
    [ERROR] 2023/02/09 01:58:09 unknown plugin: /usr/local/bin/aws
  11. lypanov commented on Mar 30, 2023

    @lypanov

    All I'm looking for is a way to execute a command (in my case terraform plan) and have op plugin inject the AWS_ environment variables into that command. Is there any way to do this currently or is this or a related ticket blocking that?

  12. kjvalencik commented on Apr 20, 2023

    @kjvalencik
    Member

    My workaround for terraform is a wrapper script that calls aws configure export-credentials --format env before executing the terraform command.

    #!/bin/bash
    
    eval "$(op plugin run -- aws configure export-credentials --format env)"
    
    /usr/local/bin/terraform "${@}"

    I have an alias to this script set to terraform in my shell config.

  13. AndyTitu commented on May 24, 2023

    @AndyTitu
    Contributor

    @lypanov We have just released our new beta solution for the Terraform shell plugin. This allows AWS to work with Terraform out of the box, and also comes up with a general solution for authenticating terraform providers. Would be awesome if you could give it a try and let us know how/if this simplifies your workflows by a bunch.

  14. lypanov commented on Jan 8, 2024

    @lypanov

    @lypanov We have just released our new beta solution for the Terraform shell plugin. This allows AWS to work with Terraform out of the box, and also comes up with a general solution for authenticating terraform providers. Would be awesome if you could give it a try and let us know how/if this simplifies your workflows by a bunch.

    @AndyTitu Sorry for the delay in response, was recovering from illness. This works really well now thank you for the solution!

  15. scottisloud commented on May 7, 2026

    @scottisloud
    Contributor

    Hi everyone,

    Looks like we have a conclusive answer and way forward here so I'll be closing this issue out.

    Thanks all!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    op-cliFunctionality to be implemented in 1Password CLI. Needs to be done by 1Password Developers.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions