How can I pass an alias to sudo?

11,864

Ironically, the solution is to call sudo from an alias.

alias sd="sudo "

Note: While not recommended, you could name the alias sudo: alias sudo="sudo "

Bash Reference Manual (Aliases)

If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion.

Share:
11,864

Related videos on Youtube

Michael Niño
Author by

Michael Niño

Updated on September 18, 2022

Comments

  • Michael Niño
    Michael Niño almost 2 years

    I have tried putting my aliases in ~/.bash_profile, ~/.bashrc, /etc/profile, and /etc/bashrc.

    I am still unable to execute the following:

    alias zf2="php public/index.php"
    

    and then execute:

    sudo zf2 orm:info
    

    The issue seems to be that I am unable to specify an alias as a command using visudo-- which causes a syntax error.

    So I am unable to call:

    sudo zf2 orm:info
    

    However, I was able to create a script at /usr/share/scripts/zf2 which contains:

    #!/bin/bash
    
    alias zf2="php public/index.php"
    zf2 $1
    

    and add this script as the command in visudo. When this script is in the end user's PATH I am able to execute

    zf2 orm:info
    

    I have different aliases like zf2 that I need to expose to the end user. I would prefer to maintain alias instead of a collection of scripts.

    • Michael Niño
      Michael Niño about 7 years
      Unfortunately I want to use aliases in visudo and I am unable.
    • Steven
      Steven about 7 years
      That is not possible. Aliases are handled by the shell (in your case bash) and expanded before being sent to the application. sudo itself knows nothing about aliases.
    • can-ned_food
      can-ned_food about 7 years
      Because @Steven is technically correct, you should clarify whether you simply want to expand aliases prior to sudo being passed the line, or whether you want the aliases expanded in the elevated environment. Pedantry isn't merely a way to elicit eye-rolls. (Wow, but that last sentence doesn't look kosher at all.)
    • Gilles 'SO- stop being evil'
      Gilles 'SO- stop being evil' about 7 years
      Possible duplicate of How can I alias a command for sudo?
    • Denis de Bernardy
      Denis de Bernardy about 7 years
      Try it with sudo -E
  • Pysis
    Pysis about 7 years
    I can maybe see reasons why someone would and would not want this done as the default for any system. The convenience and expectation as asked, versus being more careful with elevated privileges.
  • The Nate
    The Nate about 7 years
    alias sd="sudo " maychance?
  • Michael Niño
    Michael Niño about 7 years
    After reviewing my aliases I noticed that I did not have alias sudo="sudo " in the end users environment. This is the answer