Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Aliases in .bash_profile not working properly [closed]

I have been trying to alter the .bash_profile that is in my root directory, but have been running into some problems. I am on OS X, Yosemite, on a Macbook Pro. As I understand it, the .bash_profile file contains the script that is called automatically whenever the Terminal app is opened and the bash shell starts. This is what I currently have written in that file:

PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
export PATH

This works perfectly fine. However, I want to add an alias (right underneath the above two lines) as follows:

alias test='cd ..'

However, when I save this and start up the Terminal, I get the following message:

-bash: alias: ..": not found

Replacing the single quotes with double quotes doesn't help, nor does taking them away altogether. Curiously however, the following alias works:

alias c=clear

When I type c into the terminal, it clear the screen, as you would expect. However, if I instead entered this line with quotes in the bash profile as:

alias c='clear'

Then I will get the following whenever I enter c into the Terminal:

-bash: 'clear': command not found

Note that I do not get an error message on startup for this alias.

What am I doing wrong? Is there a setting I need to change somewhere to get aliases to work properly? I have seen previous examples of aliases and they simply do not work for me.

like image 696
Adrian M Avatar asked Feb 03 '15 00:02

Adrian M


People also ask

Should aliases go in Bash_profile or Bashrc?

bashrc . Thus, if you want to get the same behavior for both login shells and interactive non-login shells, you should put all of your commands in either . bashrc or . bash_profile , and then have the other file source the first one.

Do aliases work in bash scripts?

A BASH Alias is a map of commands with the sets of commands or functions that can be used as a shortcut in the command line for a BASH environment. Bash Alias allows to aggregate multiple functions into a single command and also it avoids repetitive or large commands into a simple shortcut command.


2 Answers

Wrapping the command with double quotation worked for me. I was trying with every possible way mentioned in this thread and none of them worked. Then I replaced single quote to double and that worked.

    alias mysql_start="sudo /path/to/server/mysql.server start"
like image 39
Ujjal Suttra Dhar Avatar answered Nov 16 '22 00:11

Ujjal Suttra Dhar


It looks like shell is not accessing your .bash_profile when logging via terminal.

.bash_profile is a config file of bash shell. When bash shell starting, shell will execute the commands in .bash_profile. But there are many kinds of shells, and different shells execute different config file.

Terminal is a software to receive user input, shell will execute commands.You can use cat /etc/shells to list acceptable shells. For example:

$ cat /etc/shells
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

The default shell is bash shell on Mac OX. But if you have installed zsh, the default shell is zsh, when zsh shell starting, shell will find out the file named .zshrc, and execute the commands in .zshrc.

You can use echo $SHELL to determine the current shell:

$ echo $SHELL
/bin/bash
-> echo $SHELL
/bin/zsh

If your default shell is zsh, .bash_profile don't work. The config file of zsh is .zshrc. And I guess your problem is that your default shell is not bash shell. For example, if your default shell is zsh, you should config the .zshrc , just add

PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
export PATH

or other config to ~/.zshrc.

Then source ~/.zshrc, and the config will work immediately.

like image 197
nodejh Avatar answered Nov 15 '22 23:11

nodejh