Not getting graphics even when reinstalled Ocaml (Mac OS X)? - macos

Following this post I installed brew and then reinstalled ocaml to include graphics:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew cask install xquartz
brew reinstall ocaml --with-x11
But after restarting my computer, when I tried to run an ocaml program that used graphics I got the error
Error: Cannot find file /Users/.../.opam/4.03.0/lib/ocaml/graphics.cma
The post also said:
Finally remember to check that the instance of ocaml that is running
is the one in /usr/local/Cellar/objective-caml/x.yy.z[_w]/bin, and
if it isn't then prepend that url to your PATH environment
variable.
How do I do check the instance of ocaml that is running? And what does the poster mean by "prepending that url to your PATH environment"?
I've tried changing my directory to that path, but I get an error:
$ cd /usr/local/Cellar/objective-caml/
-bash: cd: /usr/local/Cellar/objective-caml/: No such file or directory
If someone could please tell me what I need to do to get graphics.cma working that would be great!
UPDATES:
I've tried creating .bashrc and putting in
alias ocaml="/usr/local/Cellar/ocaml/4.04.0/bin/ocaml”
Yet with no avail...I'm quite lost on what to do. If anyone could give me an inkling of what to do that would be great!
(Note: I put 4.04.0 instead of 4.03.0because when I explored the directory /usr/local/Cellar/ocaml/4.03.0/bin/ocaml but the directory /usr/local/Cellar/ocaml/4.04.0/bin/ocaml does)

How do I do check the instance of ocaml that is running?
If your question is: what program is running when you type ocaml in a terminal window at the shell prompt (or more generally thru execvp and other functions)? then you should use the which ocaml command.
And what does the poster mean by "prepending that url to your PATH environment"?
Read more about the PATH variable. It is often set in your ~/.bashrc file (which you should probably and carefully edit once using your favorite editor) -or some other bash initialization file- if your interactive shell is bash. You should check what it is with the echo $PATH command. See also this. Notice that ~/.bashrc is expanded by your shell during globbing. Read also the documentation of bash notably the Bash Startup Files chapter.
If you are using opam you should read its documentation. Notably this question (mentioning PATH) from its FAQ.
Since aliases are mostly for interactive shells, defining an alias is not enough for most shell scripts. You really need to change your $PATH and/or add files (or symlinks) in directories mentioned in it.
PS. Understanding the role of PATH and how to set it is mandatory for serious use of the command line, notably on POSIX systems.

In general, homebrew puts all its binaries, libraries and settings in /usr/local/Cellar/PACKAGENAME/VERSIONNUMBER but it also creates symbolic links in /usr/local/bin that point to the latest package/version.
So, if you look at my /usr/local/bin you will see:
ls -l /usr/local/bin
Output
lrwxr-xr-x 1 mark admin 26 30 Jan 2016 ack -> ../Cellar/ack/2.14/bin/ack
lrwxr-xr-x 1 mark admin 43 11 Oct 13:30 amqp-consume -> ../Cellar/rabbitmq-c/0.8.0/bin/amqp-consume
lrwxr-xr-x 1 mark admin 49 11 Oct 13:30 amqp-declare-queue -> ../Cellar/rabbitmq-c/0.8.0/bin/amqp-declare-queue
lrwxr-xr-x 1 mark admin 48 11 Oct 13:30 amqp-delete-queue -> ../Cellar/rabbitmq-c/0.8.0/bin/amqp-delete-queue
lrwxr-xr-x 1 mark admin 39 11 Oct 13:30 amqp-get -> ../Cellar/rabbitmq-c/0.8.0/bin/amqp-get
lrwxr-xr-x 1 mark admin 43 11 Oct 13:30 amqp-publish -> ../Cellar/rabbitmq-c/0.8.0/bin/amqp-publish
lrwxr-xr-x 1 mark admin 28 17 Jul 22:49 7z -> ../Cellar/p7zip/16.02/bin/7z
lrwxr-xr-x 1 mark admin 29 17 Jul 22:49 7za -> ../Cellar/p7zip/16.02/bin/7za
lrwxr-xr-x 1 mark admin 29 17 Jul 22:49 7zr -> ../Cellar/p7zip/16.02/bin/7zr
lrwxr
As you can see, ack points to version 2.14 of ack in the Cellar and so on.
In general therefore, when using homebrew, you should not directly use anything in the Cellar because that is version-specific. Instead, you should use /usr/local/bin and rely on that pointing to the latest/greatest thing in the Cellar. That way you won't have pain when upgrading and you won't have to change all your app-1.01 to app-1.0.2 in all your scripts because you will just be using app (which, by virtue of your PATH, means /usr/local/bin/app) instead of anything version-specific.
So, I would suggest you edit your bash profile, using TextEdit like this:
open -e ~/.profile
and add this line at the end:
export PATH=/usr/local/bin:$PATH
Remove all your version-specific aliases and log out and then back in again.

Related

macOS 10.15 Terminal - unlink gets "Operation not permitted"

zsh; Terminal has Full Disk Access permission in System Preferences.
/usr/bin % ls -alF python
lrwxr-xr-x 1 root wheel 75 Jul 12 11:48 python# -> ../../System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
/usr/bin % sudo unlink python
Password:
unlink: python: Operation not permitted
/usr/bin %
EDIT by OP to add this terminal transcript:
~ % whence python
/usr/bin/python
~ % echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Users/brec/.rvm/bin
~ % ls -alF /usr/local/bin/python
lrwxr-xr-x 1 brec admin 24 Dec 11 10:45 /usr/local/bin/python# -> /usr/local/bin/python3.8
~ % python
WARNING: Python 2.7 is not recommended.
NOTE: /usr/local/bin/python3.8 does not exist.
On recent macOS versions, System Integrity Protection (SIP) prevents modification of files in several locations, including /usr/bin. Because some parts of macOS use Python, you cannot modify the symlink at /usr/bin/python - if you did, it might break some parts of the OS which depend on that specific version of Python. You cannot modify SIP-protected files even as root.
Your best bet is to install a separate version of Python and make sure your PATH environment variable is set accordingly.
I unlinked /usr/local/bin/python and then created a soft link /usr/local/bin/python to the version of python I want the python command to execute.

ConEmu/cygwin newlines don't perform carriage return functionality

I upgraded Cygwin and now Bash is acting weird. Newlines aren't always returning the cursor to the left side of the screen, but sometimes they do. Here is what I'm experiencing:
$ echo hello
hello
Thu Jan 30 08:31:33 :~
$ python3
Python 3.6.9 (default, Jul 21 2019, 14:33:59)
[GCC 7.4.0] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 56+23
79
>>> 2+3
5
>>> exit()
Thu Jan 30 08:31:46 :~
$
I have TERM=xterm-color, and I've tried TERM=cygwin and just TERM= with no difference in behavior.
Another strange thing is that the less command will mess up the newlines when I first open a file, or page down with Ctrl-F, but if I page up or scroll up or down one line at a time, the formatting is fine.
ls -l works fine. cat works fine.
I've determined it's ConEmu. It has something to do with my task command:
C:\cygwin64\bin\bash.exe --login -new_console:P:"<Standard VGA>"
I use this so the background is black. Also, when I logout, the tab closes instead of remaining open.
The default command doesn't have the newline problem, but has the problems stated above:
set CHERE_INVOKING=1 & set "PATH=%ConEmuDrive%\cygwin64\bin;%PATH%" & %ConEmuBaseDirShort%\conemu-cyg-64.exe -new_console:p %ConEmuDrive%\cygwin64\bin\bash.exe --login -i -new_console:C:"%ConEmuDrive%\cygwin64\Cygwin.ico"
Edit: Of course, it has nothing to do with the -new_console:P:"<Standard VGA>" and everything to do with running bash with %ConEmuBaseDirShort%\conemu-cyg-64.exe. I don't know what it does exactly - I need to look into it further.
Edit #2: It turns out there's an issue with arrow and delete keys being disabled by conemu-cyg-64.exe: https://github.com/Maximus5/ConEmu/issues/2035.
Edit #3: Downloading the latest developer snapshot (which is 2020-01-31 at this time) of Cygwin at https://cygwin.com/snapshots/ fixed the problem with the arrow and delete keys for me.
$ unxz cygwin1-20200131.dll.xz
$ mv cygwin1-20200131.dll /bin/cygwin1.dll
Of course, that isn't going to work while Cygwin is running, but you get the idea.
For me updating to the latest ConEnum release (Version 1.3.18.1106) solved the problem.
Latest Cygwin release fixes this.

How do you install golang binaries for all users

From all of the Golang tutorials I have read, the way that you install a Go program is by setting the environment variable GOPATH=~/go or something similar, and then you can run go get blah and Go will download the program and put the binary in ~/go/bin. You also have to add ~/go/bin into your $PATH environment variable so that you can run the programs.
How would you go about installing a Golang program into a common location for all users, so that each user on a system did not need to add a PATH environment variable?
The only way I can see of doing it is to make a directory like /usr/local/go, and set that as my GOPATH when I install the program, and then I need to add /usr/local/go/bin into the system-wide $PATH so that all users can run the programs. Is that how it should be done?
There are more environment variables that control how go ... commands work. See: https://golang.org/cmd/go/#hdr-Environment_variables. In this case, you can set GOBIN to your desired install location. Ex:
GOBIN=/path/to/common/binaries go get blah
will put the blah binary in /path/to/common/binaries. Note that you'll likely have to run with sudo.
The cleanest way is to use symlinks, so it's obvious where the tool came from e.g.
$ ls -al /usr/local/bin/brew
lrwxr-xr-x 1 user admin 28 Nov 17 18:38 /usr/local/bin/brew ->
/usr/local/Homebrew/bin/brew
So to make a tool like godocdown global to all users:
ln -s "$GOPATH/bin/godocdown" /usr/local/bin/

Linux bash command not found error

I created a couple of custom bash scripts that does some simple things like starting and stopping a PostgresSQL server. I have them stored in a specific directory of my choice.
Joes-MacBook-Pro:scripts joe$ l
total 24
-rwxr-xr-x 1 joe staff 124B Apr 18 21:22 pgstart
-rwxr-xr-x 1 joe staff 114B Apr 18 21:23 pgstatus
-rwxr-xr-x 1 joe staff 123B Apr 18 21:22 pgstop
Joes-MacBook-Pro:scripts joe$ pwd
/Users/joe/Softwares/scripts
I have even referenced these scripts in my .bash_profile as:
# Custom Scripts
export SCRIPTS_HOME=/Users/joe/Softwares/scripts
Now when I tried to use it as:
Joes-MacBook-Pro:~ postgres$ pgstart
-bash: pgstart: command not found
Should I place this script in the /bin/ directory on my Mac? Any clues?
I am no Mac-Expert, but based on linux, it should suffice to do the following in your .bash_profile:
export SCRIPTS_HOME=/Users/joe/Softwares/scripts
export PATH=$PATH:$SCRIPTS_HOME
You could omit the first line, and replace it accordingly.
Don't forget to restart your terminal, or to source your .bash_profile
Add this to your ~/.bash_profile:
PATH=$PATH:/Users/joe/Softwares/scripts
Restart Terminal and it will work.
run source ~/.bash_profile to engage the export.
However, prior to that add: PATH=$PATH:$SCRIPTS_HOME to your bash_profile so your executable can be found via command line.

Executing MATLAB from Bash

I've been trying to work on opening/executing MATLAB from bash (I'm using Terminal, specifically). However, despite numerous attempts at troubleshooting, I have been unable to do it.
Running the "matlab" command gives me the error:
-bash: matlab: command not found
A cursory Google search suggested it could be an issue of my local bin, but my bin looks like:
/usr/local/bin:
total used in directory 16 available 208047788
drwxr-xr-x 4 alifarhat wheel 136 Jul 22 11:30 .
drwxr-xr-x 3 alifarhat wheel 102 Jan 22 01:56 ..
lrwxr-xr-x 1 alifarhat wheel 29 Jul 22 11:30 matlab -> /usr/local/matlab6/bin/matlab
lrwxr-xr-x 1 alifarhat wheel 26 Jul 22 11:30 mex -> /usr/local/matlab6/bin/mex
Which seems to indicate that matlab is talking to the bin.
If it helps, when I cd into /usr/local and then ls, the only directory/item in there at all is "bin". Could this have something to do with it? How can I fix it if it does?
It seems like PATH issues. Is /usr/local/bin in your $PATH?
Try
~$ echo $PATH
What do you see?
If /usr/local/bin is not part of your $PATH you can add it:
~$ export PATH=/usr/local/bin:$PATH
Then try and run matlab from shell
EDIT:
Based on these comments it seems like matlab executable is not located at /usr/local/matlab6/bin. Therefore, you can either
Add /Applications/MATLAB_R2014a.app/bin/ to path:
~$ export PATH=/Applications/MATLAB_R2014a.app/bin:$PATH
or
Replace the broken symbolic links in /usr/local/bin (you might need root privileges for this). See this thread for more details.
Once you are in the correct directory, you should execute the command:
./matlab
instead of just typing matlab.

Resources