Shell one-liner: Difference between revisions

From Rosetta Code
Content added Content deleted
(CLISP impl)
m (→‎{{header|C}}: by the discussion page (ip signed))
Line 53: Line 53:


=={{header|C}}==
=={{header|C}}==
{{works with|Linux}}
{{works with|gcc}}
Not orthodox, but working...


The following code leaves the file <tt>a.out</tt> in the current directory (it does not
delete it to avoid to call another shell/system dependent command/program). The
''current directory'' is not specified by <tt>./</tt> in every system...
<lang c>
<lang c>
$ touch /tmp/T0.c /tmp/T && chmod 600 /tmp/T0.c /tmp/T && echo -e "#include<stdio.h>\nint main(){printf(\"Hello\\\n\");return 0;}" >/tmp/T0.c &&
$ echo 'main() {printf("Hello\n");}' | gcc -w -x c -; ./a.out
gcc /tmp/T0.c -o /tmp/T && /tmp/T && rm -f /tmp/T0.c /tmp/T
</lang>
</lang>



Revision as of 13:07, 5 June 2009

Task
Shell one-liner
You are encouraged to solve this task according to the task description, using any language you may know.

Show how to specify and execute a short program in the language from a command shell.

Avoid depending on the particular shell or operating system used as much as is reasonable; if the language has notable implementations which have different command argument syntax, or the systems those implementations run on have different styles of shells, it would be good to show multiple examples.

ALGOL 68

Works with: ALGOL 68G version Any - tested with release mk15-0.8b.fc9.i386 - Interpret straight off
$ a68g -e 'print(("Hello",new line))'

Output:

Hello
Works with: ELLA ALGOL 68 version Any - tested with release 1.8.8d.fc9.i386 - translate to C and then compile and run

For an ELLA ALGOL 68 one-liner, merge these lines of shell code:

code='print(("Hello", new line))'
a=/tmp/algol$$ s=/usr/share/algol68toc;
echo -e "PROGRAM algol$$ CONTEXT VOID\nUSE standard\nBEGIN\n$code\nEND\nFINISH\n" > $a.a68 &&
a68toc -lib $s -dir $s -uname TMP -tmp $a.a68 && rm $a.a68 &&
gcc $s/Afirst.o $a.c  -l{a68s,a68,m,c} -o $a && rm $a.c &&
$a; rm $a

Output:

Hello

AutoHotkey

<lang autohotkey>RunWait, %comspec% /c systeminfo > tmp,,Hide FileRead, var, tmp FileDelete, tmp MsgBox,% var</lang>

AWK

Maybe the most common way one can use awk is from the command line for one-liners, feeding the interpreter with an input.

$ awk 'BEGIN { print "Hello"; }'

A more "complex" and "real" example:

$ awk '/IN/ { print $2, $4; }' <input.txt

Select field 2 and 4 of lines matching the regular expression /IN/ (i.e. where IN appears)

C

Works with: gcc

The following code leaves the file a.out in the current directory (it does not delete it to avoid to call another shell/system dependent command/program). The current directory is not specified by ./ in every system... <lang c> $ echo 'main() {printf("Hello\n");}' | gcc -w -x c -; ./a.out </lang>

Hello

Common Lisp

Varies by implementation

Works with: SBCL

<lang sh>sbcl --noinform --eval '(progn (princ "Hello") (terpri) (quit))'</lang>

Works with: CLISP

<lang sh>clisp.exe -q -x "(progn (format t \"Hello from CLISP\") (quit))"</lang>

E

<lang sh>rune --src.e 'println("Hello")'</lang>

The --src option ends with the the filename extension the provided type of program would have:

rune --src.e-awt 'def f := <swing:makeJFrame>("Hello"); f.show(); f.addWindowListener(def _{to windowClosing(_) {interp.continueAtTop()} match _{}}); interp.blockAtTop()'

Emacs Lisp

<lang sh>emacs -batch -eval '(princ "Hello World!\n")' </lang>

Or another example that does something useful: indent a C source file:

<lang sh>emacs -batch sample.c --eval '(indent-region (point-min) (point-max) nil)' -f save-buffer</lang>

Forth

$ gforth -e ".( Hello) cr bye"
Hello

F#

> echo printfn "Hello from F#" | fsi --quiet
Hello from F#

Haskell

<lang> $ ghc -e 'putStrLn "Hello"' Hello </lang>

J

<lang> $ jconsole -js "exit echo 'Hello'" Hello </lang>

OCaml

<lang> $ ocaml <(echo 'print_endline "Hello"') Hello </lang>

Perl

<lang> $ perl -e 'print "Hello\n"' Hello </lang>

PHP

assuming you have the PHP CLI (command-line interface) installed, not just the web server plugin <lang> $ php -r 'echo "Hello\n";' Hello </lang>

Python

<lang> $ python -c 'print "Hello"' Hello </lang>

Ruby

<lang> $ ruby -e 'puts "Hello"' Hello </lang>

Tcl

This is an area where Tcl is lacking: <lang>$ echo 'puts Hello' | tclsh Hello</lang>