How to use bash aliases in a non-interactive shell? - bash

I am using Windows 10. I followed this tutorial on how to create bash aliases. I put the aliases in ~/.bashrc, and used source ~/.bashrc afterwards. When I tried to use one of the aliases, I get the following error:
$ docs
bash: docs: command not found
I opened a new PowerShell session, used bash, tried the alias and it still gave the same error. But it only worked when I tried it on Git Bash. From what I've researched, I was opening bash in a non-interactive shell. I tried the answer on this post and put shopt -s expand_aliases at the end of .bashrc, but it still wouldn't work. This is what my .bashrc looks like:
######## Aliases #######
# Git
alias gcl="git clone"
alias gco="git commit"
alias gcom="git commit -m"
alias gpus="git push"
alias gpul="git pull"
alias gbr="git branch"
alias gad="git add"
alias gre="git restore"
alias grest="git restore"
alias gsw="git switch"
alias gst="git status"
alias gcoam="git commit --amend"
alias gcoamne="git commit --amend --no-edit"
alias gcoamm="git commit --amend -m"
# Navigation
alias home="cd ~"
alias docs="cd ~/Documents"
alias labs="cd ~/Documents/VSCode"
alias open="code ."
################
shopt -s expand_aliases # allows aliases available in non-interactive shells
How do I make the bash aliases work in a non-interactive shell?

You have to turn on this feature:
shopt -s expand_aliases

Related

How to alias "git push" into itself + running a script?

I need to run a script which notifies my CI server after I push. Therefore I need to alias "git push" into "git push; powershell script.ps1". Here is what I am trying:
$ alias git push='git push; powershell script.ps1'
bash: alias: git: not found
Alternatively, denoting whitespace characters returns this:
$ alias git\ push='git push; powershell script.ps1'
bash: alias: `git push': invalid alias name
$ alias "git push"='git push; powershell script.ps1'
bash: alias: `git push': invalid alias name
How can I alias my script to run every time I push?
This worked:
git config --global alias.push "push; powershell ./script.ps1"
The command runs, but using "git push" still doesn't run my script.
Yes, I know that I can use webhooks for this, but it is imperative that the CI server remains fully local. Yes, I know that I can use NGROK for that, but my company does not allow it.
Git doesn't allow alias names to override proper command names. Use another label for your alias.
And if the alias content mixes a git command and shell commands, you'll have to prepend a ! to tell git to pass the command for the shell to interpret.
Try
git config --global alias.p '!git push; powershell ./script.ps1'
# then to invoke it, just
git p
Another slight improvement would be to use && instead of ; to chain your commands, in case the push fails. It would then stop from executing the unnecessary following.
git config --global alias.p '!git push && powershell ./script.ps1'

"not a git command" configuring a bash script as a git alias

I want to set a specific alias in .gitconfig to a bash script like this:
[alias]
example = "~/git-scripts/example-script.sh"
instead of:
[alias]
example = "!f() { arg1=$1; echo $arg1; }; f"
So, the echo script above would be in this file ~/git-scripts/example-script.sh
When i'm trying to execute a alias like this, i got this error:
expansion of alias 'example' failed; ~/git-scripts/example-script.sh is not a git command
What's wrong?
As Charles Duffy said in the comments area, i could make it work like this:
[alias]
example = "! ~/git-scripts/example-script"
Just add ! before the script path
Be careful with:
Permissions: If you are in Linux, just add execution permissions like this:
$ chmod +x YOUR_SCRIPT_PATH
Notice that you don't need the extension (.sh) at the script file. You can read more about this here

Laravel Homestead Per Project Install Bash Aliases Commands Not Found

I've created a per project install of Homestead. I've included after.sh (in the root directory) to provision other packages like RethinkDB with no issues, but the aliases file (also in root directory) though appearing in the VM as ~/.bash_aliases isn't running any of the aliases when I'm type them in. So for example these aliases:
alias artisan='php artisan'
alias autoload='composer dump-autoload'
In the command prompt as:
artisan migrate:refresh --seed
autoload
Throw these errors:
Could not open input file: artisan
autoload: command not found
This happens for any of the aliases I try. I've checked that ~/.bash_aliases (or /home/vagrant/.bash_aliases) exists using nano, and it is definitely a copy of aliases. Just none of the commands are being used as if it doesn't exist or as if the file though in the right spot is inaccessible.
Anyone know why? or how to fix this? It's amazing how annoying not being able to use the aliases I typically would use locally, or on global install of Homestead when using this VM.
UPDATE
I noticed I get a list of command not found errors when I SSH into the VM that equal the number of aliases I've included. The same list appears if I run source ~/.bash_aliases. For complete clarity .bash_aliases is located in /home/vagrant next to the mapped source folder /home/vagrant/app, and the output from SSHing into the VM, and the associated aliases file are included:
SSH into VM
$ vagrant ssh
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.19.0-25-generic x86_64)
* Documentation: https://help.ubuntu.com/
Last login: Mon Feb 15 00:37:39 2016 from 10.0.2.2
: command not found
: command not found
: command not found
: command not found
: command not found
: command not found
: command not found
: command not found
: command not found
: command not found
vagrant#app:~$
Aliases File
# Homestead --------------------------------------------------------------------
alias ..="cd .."
alias ...="cd ../.."
alias h='cd ~'
alias c='clear'
alias phpspec='vendor/bin/phpspec'
alias phpunit='vendor/bin/phpunit'
# Laravel ----------------------------------------------------------------------
# Access Artisan when within project folder
alias artisan='php artisan'
# Access Tinker when within project folder
alias tinker="php artisan tinker --env=local"
# Composer --------------------------------------------------------------------
alias autoload='composer dump-autoload'
# App -------------------------------------------------------------------------
alias app="cd app"
After.sh File
#!/usr/bin/env bash
#
# Install RethinkDB on Ubuntu
# #see https://www.rethinkdb.com/docs/install/ubuntu/
#
# Add RethinkDB repository and install
source /etc/lsb-release && echo "deb http://download.rethinkdb.com/apt $DISTRIB_CODENAME main" | sudo tee /etc/apt/sources.list.d/rethinkdb.list
wget -qO- https://download.rethinkdb.com/apt/pubkey.gpg | sudo apt-key add -
sudo apt-get update
sudo apt-get install -y rethinkdb
# Setup RethinkDB as a service using default configuration file
#sudo cp /etc/rethinkdb/default.conf.sample /etc/rethinkdb/instances.d/instance1.conf
#sudo vim /etc/rethinkdb/instances.d/instance1.conf
#sudo /etc/init.d/rethinkdb restart
# Setup RethinkDB as a service by copying the custom configuration file
sudo cp /home/vagrant/app/rethinkdb.conf /etc/rethinkdb/instances.d/instance1.conf
sudo /etc/init.d/rethinkdb restart
UPDATE 2
Nano output of .bash_aliases, which looks like my aliases file, but the output after this of alias truncates the first letter of the aliases.
# Homestead ----------------------------------------------------------------------
alias ..="cd .."
alias ...="cd ../.."
alias h='cd ~'
alias c='clear'
alias phpspec='vendor/bin/phpspec'
alias phpunit='vendor/bin/phpunit'
# Laravel ----------------------------------------------------------------------
# Access Artisan when within project folder
alias artisan='php artisan'
# Access Tinker when within project folder
alias tinker="php artisan tinker --env=local"
# Composer --------------------------------------------------------------------
alias autoload='composer dump-autoload'
Output from just typing alias into terminal:
vagrant#app:~$ alias
'lias ..='cd ..
'lias ...='cd ../..
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
'lias artisan='php artisan
'lias autoload='composer dump-autoload
'lias c='clear
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
'lias h='cd ~
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
'lias phpspec='vendor/bin/phpspec
'lias phpunit='vendor/bin/phpunit
'lias tinker='php artisan tinker --env=local
FINAL SOLUTION
Thanks to #JoshRumbut for solving this issue, see below for his comments.
vagrant#app:~$ tr -d '\r' <~/.bash_aliases >~/tmp
vagrant#app:~$ mv ~/tmp ~/.bash_aliases
vagrant#app:~$ unalias -a
vagrant#app:~$ source .bash_aliases
Is bash configured to look in the .bash_aliases file?
What happens if you run source ~/.bash_aliases? Do they work then?
Edit: current theory is that a weird character, possibly the carriage return (\r) is embedded in the file somewhere, as in thus question: https://unix.stackexchange.com/questions/35642/why-are-these-aliases-failing

Git: Creating an alias for running ruby commands from terminal

I had the following script in a bash file titled someCommand:
filename="$1"; day="$2"; month="$3"; message=""$4""
ruby -r "~/someFolder/someClass.rb" -e "someClass.run('$filename', '$day', '$month', '$message')"
I now want to convert it to a git alias rather than have it be a bash alias, so I tried:
git config --global alias.someCommand 'ruby -r "~/someFolder/someFile" -e "someClass.run($1, $2, $3, $4)"'
But I receive the error:
Expansion of alias 'someCommand' failed; 'ruby' is not a git command
How can I create a git alias to run ruby commands like this?
You don't want a git alias. You want a subcommand.
Name your script git-somecommand where somecommand would be the name of the command you want git to recognize.
So, for git someCommand you would name the file git-someCommand. Make sure that it is executable and in your path and you should be good to go .

Mac Terminal process ends and outputs [Process completed] when launched

When I launch the Terminal app on Mac, the process will end and output the following:
Last login: Wed Aug 6 15:53:58 on ttys003
[Process completed]
This started happening when terminal froze and I restarted it. From then on, this is the message that is displayed.
I can change the Shell to bin/sh in Terminal's preferences, but this prevents me from using my .bash_profile script.
Does anyone have any ideas or suggestions on how to fix this?
Thanks!
PS Here's my .bash_profile. I tried commenting it out and running Terminal and it still didn't work, but here is per request.
export PATH="/usr/local/mysql/bin:$PATH"
##
# Your previous /Users/mjmitchener/.bash_profile file was backed up as /Users/mjmitchener/.bash_profile.macports-saved_2013-05-06_at_09:58:31
##
# MacPorts Installer addition on 2013-05-06_at_09:58:31: adding an appropriate PATH variable for use with MacPorts.
export PATH="/opt/local/bin:/opt/local/sbin:$PATH"
# Finished adapting your PATH environment variable for use with MacPorts.
### Added by the Heroku Toolbelt
export PATH="/usr/local/heroku/bin:$PATH"
### Composer Vendor Paths
export PATH="~/.composer/vendor/bin:$PATH"
### Bin Paths
export PATH="bin:$PATH"
### Vendor Paths
export PATH="vendor/bin:$PATH"
### Aliases
#
# Directories
alias partways='cd ~/Sites/projects/PartWays/'
alias trks='cd ~/Sites/projects/ThingsRichKidsSay/'
alias forrest='cd ~/Sites/projects/rest-client/workbench/omniphx/forrest/'
alias blog='cd ~/Sites/projects/blog'
alias tinynews='cd ~/Sites/projects/tinynews'
# Laravel Commands
alias art='php artisan'
alias l4project=''
# Generator Stuff
alias g:m="php artisan generate:model"
alias g:c="php artisan generate:controller"
alias g:v="php artisan generate:view"
alias g:s="php artisan generate:seed"
alias g:mig="php artisan generate:migration"
alias g:r="php artisan generate:resource"
# Node scripts
alias node_serve='node ./scripts/web-server.js'
#Git aliases
alias ggraph='git log --oneline --all --graph --decorate'
alias ga='git add'
alias gaa='git add .'
alias gau='git add -u'
alias gco='git checkout'
alias gst='git status'
alias gc='git commit'
alias gcm='git commit -m'
alias gca='git commit -a'
alias gcam='git commit -am'
alias gls='git ls-tree HEAD'
#PHPUnit
#Vagrant
alias vm='ssh vagrant#127.0.0.1 -p 2222'
#Sqlite3
alias db='sqlite3 app/database/production.sqlite'
Old thread but still relevant. It seems the only way to fix this without having to do workarounds that cause other issues, is to reinstall the OS. Its been a common issue since 2000.
By trying above steps you will solve this problem.
Delete node module of the project.
npm install
cd ios(if ios is configured)
now run your app.

Resources