How does the shebang execute the program? - executable

I feel like a total noob asking this question, but I'm wondering, how does the shebang in a program (Ex: #!/usr/bin/env python) execute it?
I know that the file is run by ./filename, but how does it run it with the right executor?
Would it be the same as running it with the python command? If so, how does the shebang redirect it to the command?

Sergio Answered:
The shebang line specifies the right "executor". That's how it is found (by the program loader).

Related

Can both shell: and run: be used in a single rule?

I'm fairly sure the answer to the title is 'no'. However, I'd like some suggestions because I'm not able to gracefully solve this seemingly simple problem. Here's what I'd like to do in a single rule that works unmodified in Linux and Windows:
Run a shell command that produces a certain directory as part of its output. The name of the shell command is identical in Linux and Windows, so it works in both places unmodified.
Rename the directory using pathlib or some other Python module so it works transparently in Linux and Windows.
That's it!
Here's what I have come up with already which I don't want to do because they seem clunky:
Run the executable and do the rename in a shell. For this I need to make custom command lines based on which platform I'm on. (Linux 'mv' vs. Windows 'rename') Yuck.
Make another rule that runs automatically and does the rename after this rule. This is a little better but still doesn't seem "right".
I'll bet there's an elegant solution, but what is it?
Yes. There are two ways to execute a command in the shell, depending on the use case:
A shell: line in a rule. Can't be combined with other Python code.
A shell() command that can be used with other Python code in a rule's run: line

Is there a way for me to write a script in Robot Framework that utilize's the command line functions?

I'm currently working in Linux, and I know you can use Run Process to run certain applications, but I was wondering if there's a possible way to have my script running, open command line, input, for example: "clean" which in my case processes a few functions in my bash.rc. That would be extremely helpful in my automation right now.
Well essentially, what I did was I created a separate .sh executable file. Opened my .bashrc and copied my functions / aliases into my .sh file using the gedit editor. Then from my Robot Script, I used the Run Process command (I don't have my exact code at the moment) and called my executable file.

how to use CAM::PDF to find + replace from command line

Sorry for the noob question. I just downloaded CAM::PDF along with Strawberry for Windows, and trying to do find/replace from the command line. Ran buidinstalldeps to get all needed prereqs.
I'm trying to run changepagestring.pl from command line. But idk how to reference the file location and have it put the output file for me in a specified location:
changepagestring.pl master-exch-manual.pdf "as shown in Figure" figure output.pdf
My goal is to replace "see above figure" with "figure" in this file. But it's in a different directory than the one I'm in, C:\Users\Me\Doc\CAM-PDF-1.60\
So how do I run and do all this from the command line. I've seen the help file with example, but I get this:
CAM::PDF from command shell with PL file not recognized
There are a few possible solutions. The easiest one from the directory you mentioned is:
perl -Ilib bin/changepagestring.pl ...
Alternatively, if you run the usual Perl install commands from that folder, then changepagestring.pl should be included in your usual path
perl Makefile.PL
make install
Alternatively^2, you can use the "cpan" tool to automate the download, build, test and install steps in one go:
cpan install CAM::PDF

running yiic from commandline fails after necessairy steps have been taken

I'm trying to install a Yii application with the latest framework to date on wampserver2.2.
I edited the .bat file to match the directory of my php /bin folder and added this as a value to the path variable.
However I seem to be unable to run yiic from the commandline. Im trying this on a windows 7 professional OS but to no avail. If i fire up yiic.php it opens the file in a notepad window. If I try to run the .bat file, the cmdline returns that it can not open the input file c:\wamp\framework\yiic
What should I do to make yiic run from the commandline? I think I completed all the necessairy steps but could be easily overlooking something.
If someone could come up with an answer that would be great.
Two things:
Make sure you are running yiic.bat, and not just yiic (which is the Linux shell script). There are two files in the directory, and your error (can not open the input file c:\wamp\framework\yiic) looks like you are using just yiic, the Bash script.
As #schmunk mentioned in the comment on the question, you can just call yiic.php directly with the PHP CLI. That is what the yiic.bat script is doing for you. :)
C:\wamp\framework> php yiic.php webapp C:\wamp\htdocs\myproject
I answered a similar question here that covers the same stuff:
https://stackoverflow.com/a/3728454/164439

Why can't I access to Rails via multiples shells bash and zsh on OSX Lion

I installed Ruby on Rails 3 using bash on OSX Lion.
When I wanted to use zsh and do a "rails -v" command I had "Rails is not currently installed on this system".
I just do not understand why. To me it's like "you can access all the files you want with bash not with zsh".
If I want to switch to zsh, will I have to install one more time Rails? delete the old one?
Is it secure and clever to use two shells when developing Rails applications?
What are your best practices?
Thanks in advance.
PS: I am new to programming and my installation is working fine. I even created one app.
EDIT: If you encounter the same problem I would encourage you to read the second answer first to get the rationale then the first one. Thanks to both of them.
While you are running bash, type at the command line echo $PATH.
Now start up your zsh command line, and type echo $PATH.
I bet the Rails path is not included in your zsh, right?
Look in your $HOME dir for .bash* files. See which one has the Rails PATH added.
Find your zsh .* env files and copy/paste the line you found above into the approriate file.
When I say .bash* and .* files, I mean hidden files in your home dir that you'll only find by doing ls -la. If you find a .profile file, that would be a good place to insert this.
I hope this helps.
P.S. as you appear to be a new user, if you get an answer that helps you please remember to mark it as accepted, and/or give it a + (or -) as a useful answer.
I just do not understand why. To me it's like "you can access all the
files you want with bash not with zsh".
As shellter said, you must have directories added to your path in order to run commands from the command line. For more information on PATHs take a look at the Intro to Linux guide. I know you are not using Linux but that section (and lots of others) is very much applicable.
If I want to switch to zsh, will I have to install one more time
Rails? delete the old one?
No, see note on paths above and take a look at the guide.
Is it secure and clever to use two shells when developing Rails
applications? What are your best practices?
It's not really something special to use two shells at once. It depends what you do in each. I often have 6 and 7 shells open, not all for the same thing. That is really up to you and how you work. The number of shells you use is more of a workflow thing than a "best-practices" issue.
I normally have 3 shells open when I do RoR work. One running autotest in the background, one running rails -server, and one where I actually edit files and run emacs. But again, this is not best practice as it is workflow. Do whatever makes you effective.
The only trouble you could get into occasionally running two shells is say, for example, you open a file in one and delete it in another. However, when you do this it is typically very obvious.
PS: I am new to programming and my installation is working fine. I
even created one app.
For Rails, I found this tutorial very helpful.
Also, you said you were new to programming. I don't know if this is the case, but I would suggest starting with basic Ruby, before jumping into Perl. Although the tutorial I linked above covers Rails-flavored Ruby.