Run commands on Docker container from Emacs - emacs

I'm using emacs (spacemacs) and I'm using docker for development. How do I run my tests from emacs? like I do with terminal docker-compose run web rspec or whatever command.

So this might not be the best solution but it does work.
With Spacemacs you can use the shell layer to run commands in the bash shell.
See guide shell.
Edit ~/.spacemacs so that the entry dotspacemacs-configuration-layers has shell in the list.
Close then launch emacs again
Open your project
Type SPC ' and a shell will open
I have an alias setup in my ~/.bashrc with this alias dt=". '/Applications/Docker/Docker Quickstart Terminal.app/Contents/Resources/Scripts/start.sh'"
Then I run docker commands by typing dt in the shell
Now I can run any docker commands docker-compose run web [COMMAND]

Related

Looking for help on setting up wsl in vscode terminal

If I'm in my terminal and open a file with the code command, vscode will launch and the terminal inside code will show my full zsh setup that I have configured in hyper terminal. But if I open up code through windows, and select wsl as my default shell, it's pretty much useless. Anything I try, like sudo, git, apt, etc will return a command not found message.
So if I want to commit any changes in the terminal inside code then I have to use the git bash shell. Is it possible to get my zsh working without first launching from my terminal emulator so I'm using wsl instead of git bash?
running wslconfig.exe /list in powershell showed me that WSL was set to docker as the default shell, so then running wslconfig.exe /setdefault "Ubuntu" in powershell fixed my problem.

Why working permanent alias in hyper terminal doesn't work in vs-code bash terminal?

I'm on Windows 10 machine and I just installed VS-Code to use instead of Atom. I tried to use permanent alias in VS-Code Bash Terminal which I had created & was working fine in Hyper Terminal, but it doesn't work in VS-Code terminal. Why is that & How can I fix it ?
I have
alias mongod="/c/Program\ files/MongoDB/Server/4.0/bin/mongod.exe"
alias mongo="/c/Program\ Files/MongoDB/Server/4.0/bin/mongo.exe"
in my '.bash_profile' file
In VS-Code terminal, try and check your alias is still defined:
alias mongod
cd ~
more .bash_profile
You will then see if said alias is still there in that VSCode environment.
If it is: do a source ~/.bash_profile, and the alias should be operational.
see also "Why ~/.bash_profile is not getting sourced when opening a terminal?"
~/.bash_profile is only sourced by bash when started in interactive login mode.
When you open a terminal, the terminal starts bash in (non-login) interactive mode, which means it will source ~/.bashrc.
So in your case, move those alias definitions to ~/.bashrc.

How to open cygwin & execute bash in Eclipse?

I am trying to build my custom-commands in Eclipse.
This is Eclipse plugin which I am using: https://marketplace.eclipse.org/content/startexplorer
It looks like this (link to image):
Custom commands in Eclipse
I need eclipse variables in custom commands:
${resource_loc} , ${selected_resource_loc} , ${workspace_loc} , etc...
It should be something like this:
D:\cygwin64\bin\mintty.exe /bin/bash -l -c "cd ${workspace_loc}"
But mintty will close this window immediately. I need to execute command based on eclipse variable and go to bash interactive mode, without closing window.
To create a StartExplorer custom command, that opens a Cygwin terminal and
starts an interactive Bash shell in the filesystem location of the selected
resource, follow these steps:
Make sure to install chere
Cygwin package;
Install StartExplorer
Eclipse plugin;
In Eclipse Preferences for plugin StartExplorer, create a new custom
command:
Command: D:\cygwin64\bin\mintty.exe -e /bin/xhere /bin/bash
"${selected_resource_loc}"
Enabled for Resources: yes
Name for Resources Menu: Cygwin Bash Here
Resource Type: Folders
Alternatively to steps 2 and 3, if you don't care about context-menu entry, no
need to install the StartExplorer plugin.
Eclipse Extenal Tools Configuration standard feature will do the trick.
In Run > Extenal Tools Configuration, create a new Program:
Name: Cygwin Bash Here
Location: D:\cygwin64\bin\mintty.exe
Arguments: -e /bin/xhere /bin/bash "${selected_resource_loc}"
Basically, the xhere script (part of chere package) performs the following steps:
indicate to the login shells not to cd $HOME (export CHERE_INVOKING=true, which is checked for in /etc/profile);
change to the directory passed as 2nd argument (cd "$2");
Execute the shell passed as 1st argument as a login shell (exec -l $1).
Note: if you replace /bin/bash with /etc/passwd, the current user's login shell read from /etc/passwd is used instead of bash.

How can I redirect linux terminal output to Eclipse console?

I am trying to redirect Terminal output to Eclipse console using external tools where I specified Terminal path (for example /usr/bin/xterm). When I run this tool it opens Terminal outside eclipse. When I did same thing in Windows 7, setting external tool location to Windows\System32\cmd.exe it ran inside Eclipse console. I wonder how I can make Terminal (in Ubuntu 14.04) work the same way.
You should use /bin/sh as command interpreter.
In Windows, cmd.exe combines two functions—interpreting commands and displaying terminal window. In Unix these functions are strictly separated. /bin/sh interprets commands and /usr/bin/xterm (or /usr/bin/x-terminal-emulator) displays terminal window, inside which it runs /bin/sh (or other shell like /bin/bash, /bin/zsh etc.) to interpret commands.
So if you ask Eclipse to run something via /usr/bin/xterm, it will appear in a new window, because that's what XTerm does. If you just want Eclipse to capture the output, ask it to run it directly via /bin/sh.

Configure Eclipse to use bash login shell for Cygwin toolchain

I have a custom Makefile project in Eclipse and although the build does get run in a Cygwin shell... it does not seem to be a login shell (bash --login) as it doesn't set my environment variables like running cygwin.bat does.
Where in Eclipse can I change the shell command so that it will be a login shell?
What you actually aim with bash --login are your settings from /etc/profile.
Under UNIX you normally have only one login shell and so these settings are inherited by all other shells. Under Windows any Bash window is an isoloated login shell, which leads to missing environment settings when running Bash from tools that run bash simply as command processor.
I had a similar problem with Emacs compile feature. The best solution under Windows is to set the environment variable BASH_ENV to a script. Bash will execute this script when started without -i or --login, so that /etc/profile is not run. Hence the script will setup Bash for non-interactive, non-login shells.
Example:
BASH_ENV=%USERPROFILE%\.bash_env
as user environment variable. The least thing to do in this script is to set PATH as in /etc/profile:
PATH="/usr/local/bin:/usr/bin:${PATH}"
Check the path-settings in /etc/profile as it is created by Cygwin's setup.exe. You may also copy settings from ~/.bashrc or source this script.
Hope this helps.