Sollte man noch #!/binsh schreiben?

OP #7370187
Lesenswert?

hallo,

wann beginnt die nahe Zukunft? Vor 11 Jahren schrieb Fedora

1
Features/UsrMove
2
All the old paths are reachable, because there a compat symlinks
3
in place, which will not go away (at least not in the near future).
4
All your scripts and binaries should work, like they did before.

Die Symlinks /bin->/usr/bin usw. abzuschaffen, ist ja der nächste logische Schritt. Debian bookworm ist jetzt die zweite Generation ohne echtes /bin, wie lange geht das noch gut? Habt ihr schon alle eure Scripts auf #!/usr/bin/sh umgebaut?

https://fedoraproject.org/wiki/Features/UsrMove#I_don%E2%80%99t_have_/usr_as_a_separate_partition._What_changes_for_me?

#7370211
Lesenswert?

Vermutlich hast du ohnehin keine Bourneshell auf deinem System. Dann entscheidet die /etc/alternativs Lotterie welche Shell den Job bekommt.

Man arbeitet fieberhaft daran, Linux kaputt zu frickeln.

Es waere also eine gute Tat™, den tatsaechlich benutzen Interpreter mit dem nativen Pfad anzugeben.

in der /bin/sh nicht mehr nutzbar ist

Das kann schneller gehen als einem lieb ist.

Moderator Persönliche Seite #7370220
Lesenswert?

(prx) A. K. schrieb:

Ich denke nicht, dass ich die Zeit noch erleben werde, in der /bin/sh nicht mehr nutzbar ist.

Solaris? Wo die Posix-Shell sich unter /usr/xpg4/bin/sh versteckt … /bin/sh hat dort nur eine sehr historische Variante.

Auf allen anderen Systemen sollte man erwarten können, dass /bin/sh eine Posix-Shell ist. Ob das nun bash, ash, dash oder sonstwas ist, bleibt sich eigentlich gleich.

OP #7370228
Lesenswert?

Motopick schrieb:

Vermutlich hast du ohnehin keine Bourneshell auf deinem System. Dann entscheidet die /etc/alternativs Lotterie welche Shell den Job bekommt.

Das wäre ja einfach ;) Wenn man dabei gewinnt, kommt man nur in nächsten Level: man dash

1
HISTORY
2
 dash is a POSIX-compliant implementation of /bin/sh that aims to be
3
 as small as possible.  dash is a direct descendant of the NetBSD
4
 version of ash (the Almquist SHell), ported to Linux in early 1997.
5

6
 The current version of dash is in the process of being changed to
7
 conform with the POSIX 1003.2 and 1003.2a specifications for the
8
 shell.  This version has many features which make it appear similar
9
 in some respects to the Korn shell, but it is not a Korn shell clone
10
 (see ksh(1)). Only features designated by POSIX, plus a few Berkeley
11
 extensions, are being incorporated into this shell.

Die man page ist von Januar 2003, da weiß man, was man hat :)

Jörg W. schrieb:

Auf allen anderen Systemen sollte man erwarten können, dass /bin/sh eine Posix-Shell ist. Ob das nun bash, ash, dash oder sonstwas ist, bleibt sich eigentlich gleich.

Na gut, aber wenn der Link /bin->/usr/bin abgeschafft wird, erwischt das Script garkeine shell mehr.

Moderator Persönliche Seite #7370234
Lesenswert?

Bauform B. schrieb:

Na gut, aber wenn der Link /bin->/usr/bin abgeschafft wird, erwischt das Script garkeine shell mehr.

Es gibt inzwischen genügend Systeme, bei denen /bin und /usr/bin das gleiche sind. Bislang ist noch keiner auf die Schnapsidee gekommen, deshalb /bin in die Tonne zu kloppen.

Aber man kann natürlich auch einfach den Script mit ":" auf der ersten Zeile anfangen.

#7370259
Lesenswert?

Motopick schrieb:

Vermutlich hast du ohnehin keine Bourneshell auf deinem System. Dann entscheidet die /etc/alternativs Lotterie welche Shell den Job bekommt.

In welchem Linux wird die Shell über /etc/alternatives geschaltet? Ich habe auf die Schnelle keines gefunden. Das wäre m.E. erstklassige Tretmine.

Ob "sh" auf "bash" oder auf "dash" verlinkt wird, darin unterscheiden sie sich aber.

Beitrag #7370261 wurde von einem Moderator gelöscht.
#7370274
Lesenswert?

Daniel schrieb:

Ich finde das momentane System sowieso doof. Wenn man mal einrichten könnte, dass z.B. #!sh automatisch das macht, was heute "#!/usr/bin/env sh" macht, das wäre die Lösung!

Das kannst du mit binfmt_misc[1] sehr einfach erledigen. Hat aber das übliche Problem eines nicht-Standards - geht nur bei dir, bei anderen fallen solche Dateien auf die Schnauze.

[1] https://en.wikipedia.org/wiki/Binfmt_misc https://lwn.net/Articles/679310/ file://localhost/usr/src/linux/Documentation/binfmt_misc.txt

#7370288
Lesenswert?

Ich muss gestehen das ich das für den Prototypen eines ›Erste Welt Problems‹ halte.

  1. Alles geht solange es geht. Seit Jahren, seit Jahrzehnten.
  2. Wenn's nicht mehr geht, dann helfen einem die Freunde ›find‹, ›sed‹, ›awk‹
  3. Danach geht's wieder, hat ein paar Minuten gedauert und hält wieder Jahre und Jahrzehnte.
#7370294
Lesenswert?

/bin/sh that aims to be as small as possible.

Passend dazu waere dann ein vi aus den (AT&T) Originalquellen compiliert. Und zum "Fensterln" ein wm2 oder wmx.

Das wäre m.E. erstklassige Tretmine.

Ich bin im Moment da etwas sparsam ausgestattet. Ich bin mir aber sicher, dass es ueber uns kommen wird.

#7370309
Lesenswert?

Ich sehe überhaupt keinen Grund dazu /bin überall gegen /usr/bin zu ersetzen. Das wäre ein massiver Bruch und würde uns über Jahrzehnte beschäftigen. Und wozu das alles? Um den /bin -> /usr/bin Symlink einzusparen, den moderne Distros eh schon oft nutzen? /bin und vieles andere im Wurzelverzeichnis sind doch bereits weg.

#7370316
Lesenswert?

die UNIX-Geschichte

Immerhin wird man bei den Bell Labs aber fuendig:

Und gehoeren die etwa nicht zu AT&T?

http://man.cat-v.org/unix_8th/1/vi

"8th Edition of Bell Labs' Unix."

1
     VI(1)                                                       VI(1)
2

3
     NAME
4
          ex, vi - text editor
5

6
     SYNOPSIS
7
          ex [ - ] [ -v ] [ -t tag ] [ -r ] [ -R ] [ +command ] [ -l ]
8
          name ...
9

10
          edit [ options ]
11

12
          vi [ -t tag ] [ -r ] [ -R ] [ +command ] [ -l ] [ -wn ] name
13
          ...
14

15
     DESCRIPTION
16
          Ex is a superset of ed(1) with a display editing facility;
17
          edit is a simplified subset of ex; and vi is a fully
18
          display-based editor with similar capabilities.  Option -R
19
          makes the editor read-only.
20

21
     FILES
22
          /usr/lib/ex?.?strings         error messages
23
          /usr/lib/ex?.?recover         recover command
24
          /usr/lib/ex?.?preserve        preserve command
25
          /etc/termcap             describes capabilities of terminals
26
          ~/.exrc                  editor startup file
27
          /tmp/Exnnnnn             editor temporary
28
          /tmp/Rxnnnnn             named buffer temporary
29
          /usr/preserve            preservation directory
30

31
     SEE ALSO
32
          Edit: A Tutorial
33
          Ex Reference Manual
34
          An Introduction to Display Editing with Vi
35
          Vi Quick Reference Card, all in BSD 4.1 Progammer's Manual,
36
          Volume 2
37
          ed(1), jim(9.1), sed(1)
38

39
     BUGS
40
          The undo command causes all marks to be lost on lines
41
          changed and then restored if the marked lines were changed.
42
          Undo never clears the buffer modified condition.
43
          The z command prints a number of logical rather than physi-
44
          cal lines.  More than a screen full of output may result if
45
          long lines are present.
46
          File input/output errors don't print a name if the command
47
          line `-' option is used.
48
          There is no easy way to do a single scan ignoring case.
49
          The editor does not warn if text is placed in named buffers
50
          and not used before exiting the editor.
51
          Null characters are discarded in input files, and cannot
52
          appear in resultant files.
53

54
     VI(1)                                                       VI(1)
55

56
          Software tabs using ^T work only immediately after the
57
          autoindent.
58
          The wrapmargin option can be fooled since it looks at output
59
          columns when blanks are typed.  If a long word passes
60
          through the margin and onto the next line without a break,
61
          then the line won't be broken.
62
          The source command does not work when executed as :source;
63
          there is no way to use the :append, :change, and :insert
64
          commands in vi, since it is not possible to give more than
65
          one line of input to a : escape.  To use these on a :global
66
          you must Q to ex command mode, execute them, and then reen-
67
          ter the screen editor with vi or open.
#7370329
Lesenswert?

Motopick schrieb:

Aaah :).

Natürlich hatte AT&T den "vi" übernommen.

q.e.d.

Motopick schrieb:

Passend dazu waere dann ein vi aus den (AT&T) Originalquellen compiliert.

Zum Zeitpunkt von Version 8 war der Quellcode von AT&T UNIX nicht mehr problemlos verfügbar. Der kommentierte Quellcode des Kernels von UNIX Version 6 beschäftigte indes noch Jahre später die Copyshops rund um die Unis, als Lernmaterial: https://de.wikipedia.org/wiki/Lions_Book

#7370335
Lesenswert?

Da. Schau mal:

https://github.com/Cube9999/vi/blob/master/vax/ex.c

1
/*
2
********************************************************************************
3
*                         Copyright (c) 1985 AT&T                              *
4
*                           All Rights Reserved                                *
5
*                                                                              *
6
*                                                                              *
7
*          THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T                 *
8
*        The copyright notice above does not evidence any actual               *
9
*        or intended publication of such source code.                          *
10
********************************************************************************
11
*/
12
/* Copyright (c) 1981 Regents of the University of California */

https://github.com/Cube9999/vi/blob/master/vax/ex.c

#7370339
Lesenswert?

Motopick schrieb:

Regents of the University of California

Yep. Eben BSD, nicht AT&T, auch wenns auf den ersten Blick anders aussieht. Die BSD Lizenz erlaubt eine ziemlich freie Nutzung des Quellcodes, solange die hier gezeigte letzte Zeile drin bleibt.

"Die Berkeley Software Distribution (BSD) ist eine Variante des Betriebssystems Unix, die an der Universität von Kalifornien in Berkeley ab 1977 entstanden ist." (Wikipedia)

Da BSD lange Zeit noch Originalquellcode von AT&T enthielt, gab es folgerichtig so lange Zoff zwischen den beiden, bis BSD die letzte Zeile AT&T Code eliminierte. Umgekehrt sah aufgrund der freien Lizenz AT&T keine Probleme darin, BSD Code zu übernehmen.

#7370581
Lesenswert?

Xanthippos schrieb:

Seit Jahren fangen alle Scripte bei mir mit #!/usr/bin/python3 an.

Bei mir ist das Lua, bei anderen Perl. Allerdings haben diese Sprachen das Problem, dass sie nicht überall vorhanden sind (python3 z.B. gibt's bei mir nicht) und dass man mit den reinen Sprachen meist nicht allzuweit kommt - man braucht zusätzlich oft noch irgendwelche externen Module (evtl sogar eigene). Deshalb beschränke ich das auf Skripte, die ausschließlich bei mir laufen sollen - da weiß ich, was vorhanden ist, was ich benutzen darf.

Gibt es außer bauformb und dl8dtl überhaupt noch irgend jemanden der Scripte für die Bourneshell schreibt?

Nun ja, einige Sachen sind in der Shell einfacher zu lösen. Und halt alles, was auf Standardsystemen laufen soll. Die hier benötigten "externen Module" beschränken sich auf POSIX-Kommandos (d.h. u.a. auch, #!/bin/sh und nicht #!/bin/bash!).

Bei Makefiles und in der Kommandozeile selbst ist etwas mehr sh-Wissen auch nicht verkehrt ...

Moderator Persönliche Seite #7370613
Lesenswert?

Xanthippos schrieb:

Gibt es außer bauformb und dl8dtl überhaupt noch irgend jemanden der Scripte für die Bourneshell schreibt?

Sagen wir mal so: die Posix-Shell.

Die Bourne-Shell ist es nur noch bei Solaris (falls sie es nicht inzwischen doch mal geändert haben – habe ich schon 'ne Weile nicht mehr in den Fingern gehabt).

Es gibt ziemlich viele Standardaufgaben, die halt damit nach wie vor erledigt werden, und wie schon genannt wurde, die Shell ist halt auf einem unixoiden System immer da, alles andere kann da sein, muss nicht.

/usr/bin/python3 ist genauso unportabel wie /bin/bash – bei mir würdest du Python3 beispielsweise unter /usr/local/bin/python vorfinden, ein /usr/local/bin/python3 gibt es nicht, aber ein /usr/local/bin/python3.* (je nach aktueller Version).

#7370635
Lesenswert?

Motopick schrieb:

/bin/sh that aims to be as small as possible.

Passend dazu waere dann ein vi aus den (AT&T) Originalquellen compiliert. Und zum "Fensterln" ein wm2 oder wmx.

Wozu sollte man die in Shellskripten brauchen?

Foobar schrieb:

Xanthippos schrieb:

Seit Jahren fangen alle Scripte bei mir mit #!/usr/bin/python3 an.

Bei mir ist das Lua, bei anderen Perl. Allerdings haben diese Sprachen das Problem, dass sie nicht überall vorhanden sind (python3 z.B. gibt's bei mir nicht)

Wo gibt's denn kein python3? Ich dachte, das sei überall vorhanden, wobei ich zugegebenermaßen außerhalb der Linux-Welt nicht weiß, wie populär da Python ist.

und dass man mit den reinen Sprachen meist nicht allzuweit kommt - man braucht zusätzlich oft noch irgendwelche externen Module (evtl sogar eigene).

Also zumindest Python liefert da ja schon ziemlich viel mit, was für die üblichen Skripting-Aufgaben mehr als ausreichend ist.

Gibt es außer bauformb und dl8dtl überhaupt noch irgend jemanden der Scripte für die Bourneshell schreibt?

Nun ja, einige Sachen sind in der Shell einfacher zu lösen.

Ja, vor allem wenn das Skript im Wesentlich nur daraus besteht, ein paar Kommandozeilenprogramme aufzurufen und miteinander zu 'verpipen'.

#7370738
Lesenswert?

Und zum "Fensterln" ein wm2 oder wmx.

Wozu sollte man die in Shellskripten brauchen?

Die Frage ist falsch gestellt. Haette man sie richtig gestellt, haette man auch schon die Antwort.

Es gibt durchaus Systeme, bei denen eine vorhandene initiale Textkonsole nur dazu taugt, Fehlermeldungen auszugeben und eine andere Umgebung zu starten. Vermutlich kennst du sowas nicht.

#7370881
Lesenswert?

Foobar schrieb:

Das kannst du mit binfmt_misc[1] sehr einfach erledigen.

Hab ich jetzt mal umgesetzt, siehe Anhang. Anschalten mit "./shebang --enable", abschalten mit "./shebang --disable", Verwendung auf eigene Gefahr.

Anders als bei normalen shebang Zeilen in Linux interpretiert es auch noch \ escapes, erlaubt mehrere Argumente und kann - darum gieng es mir eigentlich - Binaries im Path suchen.

Es wäre mir zwar lieber, wenn der Kernel das machen würde. Jedes mal so ein Programm zu starten ist doch einiges an unnötigem Overhead.

Angehängte Dateien:
Gast #7371298
Lesenswert?

Motopick schrieb:

Man arbeitet fieberhaft daran, Linux kaputt zu frickeln. Das kann schneller gehen als einem lieb ist.

Bei manchen Projekten habe ich den Eindruck, das da Leute kommen mit enormen Fachwissen und erst ein paar einwandfreie Beitraege machen, und dann, ganz ploetzlich einen Riesen"fehler" der sich erst spaeter auswirkt, bzw. auffaellt.

Das passierst meistens bei erfolgreichen Projekten mit closed-source Konkurrenz und/oder Schluesseltechnologien wie Grafikkartentreiber etc.

Ein Schelm wer boeses dabei denkt. Wer macht bloss sowas?

https://www.fudzilla.com/media/k2/items/cache/377d06745597733b1a389a68ae653035_L.jpg

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren