I tried sw_vers but it only prints the information to the terminal. I cannot use it, as I have to store it in a variable and then compare.
Based on version I have to move files to appropriate location in file system.
What's the correct way to achieve this?
This is the way to do it:
v=$(sw_vers -productVersion)
echo $v
10.9.3
Related
I'm fairly new to writing scripts on Mac OS so apologies if the answer is fairly obvious.
I want to add a date variable to my script on Mac OS that will output the current date in YYYYMMDD format.
On Windows I would write this as:
set now=%date:~6,4%%date:~3,2%%date:~0,2%
%now%
How would I do something similar when writing a .command file on Mac OS?
You can run this in a terminal/bash script
myDate=$(date +%F)
echo $myDate
It outputs a date like:
2021-05-21
Alternatively you can specify a formatter:
myDate=$(date +%Y%m%d) # to remove the dashes
Starting in bash 4.1 or 4.2, the builtin printf can emit the formatted time:
printf '%(%Y%m%d)T' -1 # => 20210521
Since MacOS ships with bash 3.2 by default that means you'll need to install a newer version yourself. With Homebrew that is as easy as brew install bash
I have installed ActivePerl 5.20.2 today on Mac OS X 10.9.5
Checking the version of perl in Terminal (perl -v) I see 5.20.2
So everything seems to be ok. But..
When I start my CGI scripts the script is running under built in perl (which is 5.16) (if using #!/usr/bin/perl).
If I use #!/usr/local/ActivePerl5.20.2/bin/perl then it runs under 5.20.2 that is required.
The question is: is it somehow possible to change the directory for using in my scripts from #!/usr/local/ActivePerl5.20.2/bin/perl to simple and familiar #!/usr/bin/perl keeping running under ActivePerl instead of built in.
I need to override the system's default version with the new ActivePerl.
I would be appreciated for your detailed answers (with name of files and directories where they are located) if ones are to be changed to implement salvation.
Thanks!
The question is: is it somehow possible to change the directory for using in my scripts from #!/usr/local/ActivePerl5.20.2/bin/perl to simple and familiar #!/usr/bin/perl keeping running under ActivePerl instead of built in.
Don't even try. That way lies damnation, not salvation. The ability to specify the specific interpreter that will handle your scripts is an important feature.
Instead, package your CGI script as a simple CPAN module. Then, install it using the familiar
$ /usr/local/ActivePerl5.20.2/bin/perl Makefile.PL
$ make install
routine. The shebang line will be automatically adjusted to reflect the perl that was used to build and install your package.
First, instead of specifying a particular path to your Perl interpreter in your script:
#! /usr/local/ActivePerl5.20.2/bin/perl
or
#! /usr/bin/perl
Specify this:
#! /usr/bin/env perl
This will find the first executable Perl interpreter in your $PATH and then use that to execute your Perl script. This way, instead of having to change your program, you only have to change the $PATH variable.
Next time, take a look at PerlBrew for installing a different version of Perl. PerlBrew will allow you to install multiple versions of Perl all under user control, and let you select which version of Perl you'd like to use.
I also recommend to put /usr/local/bin as the first entry in your $PATH. Then, link the executables you want to run to that directory. You can use something like this to create your links:
for file in $/usr/local/ActivePerl5.20.2/bin/*
do
basename=$(basename $file)
ln -s "$file" "/usr/local/bin/$basename"
done
This way, all programs you want to execute are in the same directory which makes setting $PATH so much easier. I even put /usr/local/bin in before /usr/bin and /bin because I want to be able to override the system's default version.
What I wish to know is whether there is something similar to binfmt-support on mac.
I have a nacl binary executable and I wish to make mac aware of the executable format so thatI can run this executable from command prompt directly.
I have seen people using binfmt-support on linux to achieve this.
Just to explain what I want in more simple terms - Say I have a.nexe file. I can run this file on mac terminal with command "../tools/sel_ldr_x86_32 -B ../tools/irt_core_x86_32.nexe a.nexe"
Instead of this big command, I wish to simply run it like "./a.nexe" and my shell file should then get invoked which would eventually call the command like "../tools/sel_ldr_x86_32 -B ../tools/irt_core_x86_32.nexe a.nexe"
If the file itself is binary, so you can not add a #! to the start of the file, then so far as I know you only have one option; create an alias for the command line in your ~/.bashrc file:
alias nacl='/path/to/sel_ldr_x86_32 -B /path/to/irt_core_x86_32.nexe'
which would then let you type nacl a.nexe at the command line.
NOTE: You will want to use absolute paths in your alias for this to work correctly.
For some reason, when I try to call PDFtk from Matlab (pdftk *.pdf cat output combFile.pdf), I get a /bin/bash: pdftk: command not found error, but I can run the same command in terminal in the same directory with no problem. I have restarted my system, but that did not seem to help. I am running Mac OSX 10.9.1 and Matlab 2013b. I do not want to use the absolute path to PDFtk, because it needs to be cross-platform compatible.
EDIT: This may help. When I echo $PATH in Matlab I get /usr/bin:/bin:/usr/sbin:/sbin. When I do it in terminal, I get /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin. Then I did which pdftkand it returned /usr/local/bin/pdftk Is there anyway to add the /usr/local/bin/ path to Matlab?
I believe that the export PATH idea would probably be better for a single system (note: I have not tested it), but I needed my script to be used on several Mac and Linux machines that are out of my control. This is what I ended up using (yes, I know that this will break on Windows, but that is ok)
if(ismac)
system('/usr/local/bin/pdftk myfig[0-9][0-9].pdf cat output myfigCombined.pdf');
else
system('/usr/bin/pdftk myfig[0-9][0-9].pdf cat output myfigCombined.pdf');
end
Originally, I was using if(isunix) for the second command, but presumably because of Mac's unix architecture both commands were being executed.
EDIT: I was able to test it on Linux and it worked perfectly. I suppose this would be the syntax for Windows, but I do not have access to a Windows machine with PDFtk and Matlab installed, so no guarantees (also, I am not sure that I did the path quotation marks right...):
elseif (ispc)
system('"C:\Program Files (x86)\PDFtk Server\bin\pdftk" myfig[0-9][0-9].pdf cat output myfigCombined.pdf');
It seems that your $PATH environment variable is not exported to Matlab. Reading
http://www.mathworks.com/matlabcentral/newsreader/view_thread/255609
I'd suggest to add a
export PATH=$PATH:<Path-to-your-PDFtk-binary>
in your .bash_profile
I am trying to download myrna tool on mac os x.
for one of procedures on installation, "Set the MYRNA_HOME environment variable to point to the extracted directory (containing myrna_emr)"
So i tried this way
echo "export MYRNA_HOME=/.../....directory/.." >> ~/.bashrc
but it seems it does not work.(when i type echo MYRNA_HOME in command line, there is nothing OR when i type printenv MYRNA_HOME does not come out.)
anyone who knows how to set up Env Vars??
thank you,
There are several ways to do that. One would be adding your variable to ~/.bash_profile file.
Example:
MYRNA_HOME=/whatever/you/want/
export MYRNA_HOME
Then you can try if it works by logging in again and trying on a terminal:
$ echo $MYRNA_HOME
It should print whatever you set MRYNA_HOME to on ~/.bash_profile.
If you want the environment variable to be available to all users, you can change /etc/bashrc file. But I would prefer just changing one users' environment.