MSYS2 on Win7 prints "Can't find file" after every command? - linux

I just installed MSYS2 on my Windows 7 VM and the only stuff I've really done so far was that I modified my ~/.bashrc file by adding a few lines.
The only stuff I added to the file was a few alias cmds, an export cmd, and I modified the PS1 variable. See below:
alias ll='ls -l'
alias la='ls -A'
alias cls='clear'
export PATH="$PATH:/home/Matt/bin"
PS1=$(print '\033]0;${PWD}\n\033[32m${USER}#${HOSTNAME}:\033[33m${PWD/${HOME}/\~}>\033[0m ')
Other then that stuff above, that's all I've really done. So after making the changes to ~/.bashrc I exited from MSYS2's command prompt and then restarted MSYS2 to make the .bashrc changes go into effect. I know I could have just re-sourced the file but I just quickly exited and restarted instead...
Then, after I restarted MSYS2 this printed as the first line in the terminal --> "Can't find file" and then after everytime I hit enter at the cmd prompt it prints "Can't find file" just before the next prompt prints to the screen, like below:
Terminal shows this when I start-up MSYS2:
--------------------------------------------------------------------
Can't find file
Matt#My-Win7VM:~> ls -l
total 0
drwxr-xr-x 1 My-Win7VM+Matt My-Win7VM+None 0 Jun 3 12:01 bin
Can't find file
Matt#My-Win7VM:~>
Can't find file
Matt#My-Win7VM:~>
Can't find file
Matt#My-Win7VM:~>
--------------------------------------------------------------------
Any ideas what file it could be talking about that it can't seem to find..?
Any thoughts or suggestions would be greatly appreciated.
Thanks in Advance,
Matt

Ok I think I found the problem.
I ran the env command, and the PS1 environment variable was showing this
PS1=Can't find file \033]0;${PWD}\n\033[1;31m${USER}#${HOSTNAME}:\033[1;34m${PWD/${HOME}/\~}>\033[0m
So I removed the export PS1=${print ...} line from my ~/.bashrc file to just a double quoted variable assignment, instead of using the print command.
Because it looks like the print command is trying to be run from "/c/Windows/system32/print" and if you pass it a string you can see the error that was showing:
$ which print
/c/Windows/system32/print
$ print "Hello World"
Can't find file Hello World
So as you can see, that print command is expecting a filename, and not a string. So switching it to just an assignment statement like below, fixed the error:
export PS1="\033[1;31m${USER}#${HOSTNAME}:\033[1;34m${PWD/${HOME}/\~}>\033[0m "
Now everything seems ok.
EDIT:
Ran into new problem where the directory in the prompt wasn't changing when I switched dirs... Found out I was using the wrong method. So I found the PS1 switches and now it's all better this time:
PS1="\033[1;31m\u#\h:\033[0m\033[1;34m\w>\033[0m "
-Matt

Looks like you've copied your $PS1 from /etc/profile
Try the $PS1 variable from /etc/bash.bashrc instead:
# Set a default prompt of: user#host, MSYSTEM variable, and current_directory
PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u#\h \[\e[35m\]$MSYSTEM\[\e[0m\] \[\e[33m\]\w\[\e[0m\]\n\$ '

Related

Echo $JAVA_HOME returns empty despite being present in .bashrc, .bash_profile, .profile files

I've added the following line in all 3 files:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
If I do, echo $JAVA_HOME, I get empty line as output.
If I do source .bash_profile and then do echo $JAVA_HOME, I get the output correctly.
If I close the terminal application and re-open the terminal app again, echo $JAVA_HOMEshows empty again. Isn't .profile or .bash_profile supposed to load it to bash when I reopen? I added it to all 3 files to be sure. But it just doesn't seem to work
Note: I'm using Zsh on Mac. Does this have anything to do with what I'm facing?
Thanks #JoachimIsaksson for the solution in the comments. I had to move stuff to .zprofile for zshell on Mac and it worked.

GAMESS config script error on bash: syntax error near $<

Error I get is following:
After the new window is open, please hit enter to go on../config: line 82: syntax error near unexpected token newline'
./config: line 82:set reply=$<'
I'm in bash shell. The script was originally meant for csh. I've changed the first line of the script to #!/bin/bash.
The script is supposed to open a new window to enter some variables for configuring.
.
.
.
echo "use the word 'type' to indicate it is a command for the other window."
echo " "
echo -n "After the new window is open, please hit enter to go on."
set reply=$<
tput clear
I've checked and know that the shell is interactive. Instead of executing with sh ./config I tried with bash ./config ; still same error. if I type < in the shell I get the same error. So I figured that make cannot understand '<'
I'm at my wits end googling for the error. Any help is appreciated!
Thanks to meatspace! I abandoned the idea of 'fixing' but just get it running.
What worked was running the script while I'm in tcsh - no edits needed in the script. Since I only needed to set everything for the configuration file it didn't matter how the config script generated the actual installation script.
After that is generated I just switched to bash and everything worked.

Program runs fine from the terminal, but does not work from a shell script

I am on Linux Mint.
I have program called samtools, and it is stored in a folder on my desktop. I've added path to the executable into $PATH variable. In other words my local ~/.bashrc file has a line:
export PATH="~/Desktop/samtools/samtools-1.1:$PATH"
Executable file named samtools is in this folder.
So when I try to launch it from a command line like a simple command, by just typing "samtools" it works. It also works when I type direct path to the executable in the command line.
However when I try to launch it from a shell script, it does not launch and says either No such file or directory or not found.
Actually, I am trying to use another software which uses some shell scripts to preprocess some data. The error I am getting looks like this:
Indexing...
./RD_capture//process_one_capture.sh: 17: ./RD_capture//process_one_capture.sh: samtools: not found
Sorting...
./RD_capture//process_one_capture.sh: 20: ./RD_capture//process_one_capture.sh: samtools: not found
Piling up...
./RD_capture//process_one_capture.sh: 23: ./RD_capture//process_one_capture.sh: samtools: not found
Shell code looks like this:
echo "Indexing..."
samtools index $INPUTDIR/$sample.bam
#Then we sort them
echo "Sorting..."
samtools sort $INPUTDIR/$sample.bam $TMPDIR/$sample.sorted
#Finally we pile them up
echo "Piling up..."
samtools mpileup $TMPDIR/$sample.sorted.bam | cut -f 1-4 > $OUTPUT/$(basename $sample .bam).pile
Can anyone help me to solve this problem?
It looks like Linux is not able to find samtools.
To solve this use:
Declare this in the beginning (change pwd with the path that leads to executable from pwd)
export set CURRENT_DIR=`pwd`
and while calling samtools use
$CURRENT_DIR/samtools
Note 1: you are responsible to tell the exact path to shell script as shell scripts execute from /usr/bin/sh. try echoing the path on the console with the command, if this does not help, as follows:
echo `pwd`
Note 2: the use of back quote above that is located on left hand side top corner of your keyboard.
Note 3: the export set is used to store global variables in a shell script so that commands that appear after this command can use this variable and update it when ever required.

Defining aliases in Cygwin under Windows

I am trying to define some aliases in cygwin, but with no success. I am doing so like this at the end of the .bashrc file.
alias foo='pwd'
I have tried to add this line in a .bashrc file in both inside the home folder of cygwin and in the home folder for the Windows user I am on C:\Users\Nuno\. In both cases I have just appended this line to a copy of the /etc/skel/.bashrc file. In either cases, it didn't work.
I had this working before. I had to reinstall Cygwin and ever since it never worked properly again. I have removed all files (or at least think so, when doing the reinstallation). I have also noticed that in the first install (when it was working) cygwin already was creating .bash files in the home folder. Now, it doesn't.
I am on a machine running Windows 7.
EDIT: My cygwin home folder is set to the Windows home folder C:\Users\Nuno\. I have placed what I think is a valid .bashrc file there, but it still doesn't work.
Thanks in advance.
As me_and already explained what's going on I just want to add a workaround should you for whatever reason not be able or willing to remove Windows' HOME environment variable.
Normally the shortcut for Cygwin executes
C:\cygwin\bin\mintty.exe -i /Cygwin-Terminal.ico -
Instead you can create a batchfile with the following content and start that:
#echo off
set HOME=
start C:\cygwin\bin\mintty.exe -i /Cygwin-Terminal.ico -
That will start a a Cygwin windows whose home directory settings are not overridden by a Windows environment variable.
Your .bashrc file will be loaded from wherever Cygwin Bash thinks your home directory is when it starts. You've mentioned in your edit that you've changed your home directory, but not how, so it's possible you've made a mistake there.
Cygwin will load your home directory from one of two places, and if they differ it can cause problems:
The HOME environment variable. This will be picked up from however you launch Cygwin, so normally from Windows itself. You can see what environment variables you have defined by pressing Win+Pause, going to "Advanced system settings", "Environment Variables…". If "HOME" is in either "User variables" or "System variables", delete it – it's unnecessary and only causes problems.
Cygwin's /etc/passwd file (normally C:\Cygwin\etc\passwd from Windows). This will have a number of lines containing details of each user on the system; the seventh : separated field is the home directory. You can tell which user it's looking at by running whoami from a Cygwin bash shell.
If whoami reports nunos, you should have a line in Cygwin's /etc/passwd that looks something like the following:
nunos:unused:1001:513:U-System\nunos:S-1-2-34-567890-123456-7890123-1001:/home/nunos:/bin/bash
It's that /home/nunos that's important; if it's something different you should probably reset it to that, at which point you want to use the .bashrc in Cygwin's /home/nunos/.
You should also be very wary of directories that contain spaces for this. C:\Users\nunos should be fine, but beware in particular C:\Documents and Settings\nunos, which just won't work with Cygwin.
I had the same issue, where the aliases added to ~/.bashrc didn't work.
It seems that, for some reason, the ~/.bashrc was not executed when launching the console.
I stumbled upon a response that fixes the issues
So, you need to create a .bash_profile file. This one seems to be the default script, and put this code in it, to ensure that the .bashrc is executed.
# ~/.bash_profile: executed by bash for login shells.
if [ -e /etc/bash.bashrc ] ; then
source /etc/bash.bashrc
fi
if [ -e ~/.bashrc ] ; then
source ~/.bashrc
fi
That works for me, just make sure that .bash_profile is executable. (chmod +x ~/.bash_profile)
Here's a really quick and dirty way to do it, but it works fine for most things!
Let's say you want to always run 'ls --color' instead of just 'ls'. Instead of messing around with .bashrc stuff, you can create a simple .bat file that essentially bootlegs the original ls command.
Here's what I did:
cd /bin
echo ls2.exe %* --color > lsNew.bat
mv ls.exe ls2.exe
mv lsNew.bat ls.bat
So now, whenever you type in ls from CMD, you actually are calling ls.bat, which in turn calls ls2.exe --color, the original ls command with the --color flag, along with the rest of the arguments, which are nicely passed through %*.
I had the same problem, but I was using ConEmu to run my console. I had to go into settings and change the settings from this :
set CHERE_INVOKING=1 & %ConEmuDrive%\Programs\Cygwin\bin\sh.exe --login -i -new_console:C:"%ConEmuDrive%\Programs\Cygwin\Cygwin.ico"
to this:
set HOME= & set CHERE_INVOKING=1 &
%ConEmuDrive%\Programs\Cygwin\bin\bash.exe --login -i
-new_console:C:"%ConEmuDrive%\Programs\Cygwin\Cygwin.ico"
Then it would work correctly.
It works as explained from cygwin:
Create a file ".profile" in your windows home dir. This will load every time when you start cygwin.
You can edit the file with your alias or you can source the .bashrc.
If you'll source, insert "source .bashrc" and save .bashrc also in your windows home dir.
Now you can start editing the .bashrc.
This is working for me On windows 10 with Cygwin64. Don't worry "kubectl" is just the program that I want to run when I type "k". restart Cygwin terminal after the change.
Smith#NB-Smith-3 ~ echo "alias k=C:/Users/Smith/kube/kubectl" >> $HOME/.bash_profile
changes this file
C:\cygwin64\home\Smith.bash_profile
I had same problem is why the path not is correct, the path correct is: D:\C++\cygwin\home\USER_WINDOWS.bash_profile

Creating a command in linux

I have created a simple script:
echo "the path of the current directory is `pwd`"
and saved it by the name pathinfo
then i have created a bin directory at my home page with path as
/home/vpnsadmin/bin
and copied my script(pathinfo) to that bin directory.
Now i want run this script as a command but it is showing error
-bash: /usr/bin/test2: No such file or directory
but if copy my script(pathinfo) to "/usr/bin/" then it runs as a command.
the PATH environment variable is set as-
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/home/vpnsadmin/bin
My question is why does the shell not run it as a command when it is present in /home/vpnsadmin/bin.
or else
why does it only check for the binary at /usr/bin and not at /home/vpnsadmin/bin or at /bin
The shell that is to execute your command needs to have the correct PATH variable set at the time of execution and, depending on shell, might need to have created its own internal (hash)map of the available commands.
Assuming you are using bash, try the following with your script saved in /usr/bin:
$ PATH=/ test2
$ PATH=/usr/bin test2
In the first case you should get an expected "not found" error, in the second it should work. The third test to perform is left as an exercise...
And I have to say that the supplied error message looks a bit odd if you actually tried to do
$ test2
and not
$ /usr/bin/test2
before copying the command to /usr/bin.
Edit:
Also, avoid naming your scripts test, in any way shape or form. This causes so much confusion for beginners.
Hint:
man test
Did you have the path to bash at the top of your script and did you use backticks around pwd?
#!/bin/bash
echo "the path of the current directory is `pwd`"
Did you make the file executable?
chmod +x pathinfo
There is another script pathinfo somewhere in your path which contains a call to /usr/bin/test2
Try whereis pathinfo to see how many there are and which pathinfo to see which one your shell currently prefers.

Resources