<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[ich kann kein sh]]></title><description><![CDATA[<pre><code>$ /usr/bin/time -f &quot;%E wall&quot; sleep 1
0:01.00 wall
$ export TCMD='/usr/bin/time -f &quot;%E wall&quot;'
$ $TCMD sleep 1
/usr/bin/time: cannot run wall&quot;: No such file or directory
Command exited with non-zero status 127
&quot;0:00.00
$
</code></pre>
<p>was mache ich falsch? ich kann leider kein bash oder zsh benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/266861/ich-kann-kein-sh</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 03:25:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/266861.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 15 May 2010 14:54:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ich kann kein sh on Sat, 15 May 2010 14:54:16 GMT]]></title><description><![CDATA[<pre><code>$ /usr/bin/time -f &quot;%E wall&quot; sleep 1
0:01.00 wall
$ export TCMD='/usr/bin/time -f &quot;%E wall&quot;'
$ $TCMD sleep 1
/usr/bin/time: cannot run wall&quot;: No such file or directory
Command exited with non-zero status 127
&quot;0:00.00
$
</code></pre>
<p>was mache ich falsch? ich kann leider kein bash oder zsh benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897566</guid><dc:creator><![CDATA[sh-c0d0r]]></dc:creator><pubDate>Sat, 15 May 2010 14:54:16 GMT</pubDate></item><item><title><![CDATA[Reply to ich kann kein sh on Sat, 15 May 2010 21:59:24 GMT]]></title><description><![CDATA[<p>sh-c0d0r schrieb:</p>
<blockquote>
<pre><code>$ /usr/bin/time -f &quot;%E wall&quot; sleep 1
0:01.00 wall
$ export TCMD='/usr/bin/time -f &quot;%E wall&quot;'
$ $TCMD sleep 1
/usr/bin/time: cannot run wall&quot;: No such file or directory
Command exited with non-zero status 127
&quot;0:00.00
$
</code></pre>
<p>was mache ich falsch? ich kann leider kein bash oder zsh benutzen.</p>
</blockquote>
<p>EDIT: wie ihr seht ist das Problem dass die doppelten Anführungsstriche nicht beachtet werden wenn das ausgeführte Kommando aus einer Umgebungsvariablen gelesen wird. Verstehe ich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897715</guid><dc:creator><![CDATA[sh-c0d0r]]></dc:creator><pubDate>Sat, 15 May 2010 21:59:24 GMT</pubDate></item><item><title><![CDATA[Reply to ich kann kein sh on Sat, 15 May 2010 23:14:28 GMT]]></title><description><![CDATA[<p>sh-c0d0r schrieb:</p>
<blockquote>
<pre><code>$ /usr/bin/time -f &quot;%E wall&quot; sleep 1
0:01.00 wall
$ export TCMD='/usr/bin/time -f &quot;%E wall&quot;'
$ $TCMD sleep 1
/usr/bin/time: cannot run wall&quot;: No such file or directory
Command exited with non-zero status 127
&quot;0:00.00
$
</code></pre>
<p>was mache ich falsch? ich kann leider kein bash oder zsh benutzen.</p>
</blockquote>
<p>In bash passiert übrigens genau das gleiche.</p>
<p>Zuerst einmal: Mit alias statt einer Umgebungsvariablen würde es funktionieren, sowohl in sh als auch in bash.</p>
<pre><code>$ TCMD sleep 1  
sh: TCMD: not found
$ alias TCMD='/usr/bin/time -f &quot;%E wall&quot;'
$ TCMD sleep 1
0:01.00 wall
$
</code></pre>
<p>Weil du aber &quot;export&quot; geschrieben hast, hilft dir das vermutlich nicht viel.</p>
<p>Das Problem ist das word splitting, das die shell macht. Zu diesem Zeitpunkt werden Anführungszeichen wie &quot;&quot; nicht mehr beachtet. In bash hättest du die Möglichkeit, mit arrays zu arbeiten, um die Parameter beizubehalten:</p>
<pre><code>bash$ TCMD=( /usr/bin/time -f '%E wall' )
bash$ &quot;${TCMD[@]}&quot; sleep 1
0:01.00 wall
bash$
</code></pre>
<p>Es gibt auch eine Möglichkeit, das in sh zu erreichen. Diese Möglichkeit existiert auch in bash. Allerdings ist das ein ziemlich obskures Feature und es ist bestimmt keine kluge Idee, das in einem Produktiv-System einzusetzen, weil sicher niemand damit rechnet. Ich spreche von der Umgebungsvariablen IFS.</p>
<pre><code>$ TCMD=&quot;/usr/bin/time,-f,%E wall&quot;
$ IFS=,
$ $TCMD sleep 1
0:01.00 wall
$
</code></pre>
<p>Das funktioniert in sh und in bash.<br />
Der Inhalt von IFS legt fest, an welchen Zeichen word splitting stattfindet. Normalerweise enthält IFS nur whitespace wie das Leerzeichen. Nichts außer dem gesunden Menschenverstand hindert aber daran, IFS auf etwas beliebiges zu setzen. Man kann IFS auch vorher in einer anderen Variablen speichern und nach dem Befehl wiederherstellen. Das wäre zumindest ein bisschen sauberer, weil IFS schließlich eine globale Variable ist, die man aus gutem Grund nicht einfach so ändern sollte.</p>
<p>edit: Falls es eine bessere Lösung geben sollte, würde mich die interessieren.</p>
<p>edit 2: Möglicherweise funktionieren meine Lösungen nur in /bin/sh von Ubuntu. Es kam mir schon vorhin beim Schreiben komisch vor, dass /bin/sh Aliase kennt, genauso wie bash. Mein /bin/sh ist in Wirklichkeit die Shell &quot;dash&quot;.<br />
Deswegen kann ich nur sagen: Ich benutze /bin/sh nie und weiß deswegen nicht genau, welche Befehle man dort auf jedem System minimal voraussetzen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897737</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897737</guid><dc:creator><![CDATA[Christoph]]></dc:creator><pubDate>Sat, 15 May 2010 23:14:28 GMT</pubDate></item><item><title><![CDATA[Reply to ich kann kein sh on Sun, 16 May 2010 07:00:49 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Als absoluter Linuxnoob bleibt mir nur die Frage: Was macht ihr da? Was soll das sein?</p>
<p>chrische</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897764</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 16 May 2010 07:00:49 GMT</pubDate></item><item><title><![CDATA[Reply to ich kann kein sh on Sun, 16 May 2010 09:56:15 GMT]]></title><description><![CDATA[<p>&quot;Ich kann kein sh&quot; klang für mich zunächst wie ein phonetisches Problem <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897791</guid><dc:creator><![CDATA[_TdZ]]></dc:creator><pubDate>Sun, 16 May 2010 09:56:15 GMT</pubDate></item><item><title><![CDATA[Reply to ich kann kein sh on Sun, 16 May 2010 10:19:49 GMT]]></title><description><![CDATA[<p>christoph:<br />
das mit dem IFS ist interessant, vielleicht baue ich das irgendwo anders ein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /><br />
ich habe inzwischen nur den Formatstring in eine Variable gepackt, das geht und ist nur etwas hässlicher.<br />
Anscheinend macht export etwas mit Anführungsstrichen das ich nicht verstehe.</p>
<p>chrische5 schrieb:</p>
<blockquote>
<p>Hallo</p>
<p>Als absoluter Linuxnoob bleibt mir nur die Frage: Was macht ihr da? Was soll das sein?</p>
<p>chrische</p>
</blockquote>
<p>sh ist eine shell, ähnlich wie cmd.exe in Windows.</p>
<p>es gibt das programm <code>/usr/bin/time</code> das die Laufzeit, CPU-zeit etc. eines anderen programms misst und ausgibt. diesem programm kann man eine option mitgeben, die angibt wie die ausgabe formatiert ist. ich wollte mir eine umgebungsvariable definieren, in welcher der time-Aufruf mit allen Optionen steht, damit ich im sh-skript nur einmal das Ausgabeformat definieren muss.</p>
<p>Weiterhin wird Text zwischen zwei Anführungsstrichen als ein Parameter aufgefasst; ohne Anführungsstriche trennt die shell die Eingabe normalerweise an jedem Leerzeichen und übergibt die getrennten Argumente an das aufgerufene Programm.</p>
<p>Das Problem ist, dass die Anführungsstriche, wenn sie in der Umgebungsvariable stehen, nicht beachtet werden, d.h. die Eingabe wird auch an Leerzeichen innerhalb eines gequoteten Strings aufgeteilt. Ich habe das Problem inzwischen anders gelöst, aber wollte doch wissen, was ich beim shell-scripting nicht verstanden habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897797</guid><dc:creator><![CDATA[sh-c0d0r]]></dc:creator><pubDate>Sun, 16 May 2010 10:19:49 GMT</pubDate></item><item><title><![CDATA[Reply to ich kann kein sh on Sun, 16 May 2010 10:37:31 GMT]]></title><description><![CDATA[<p>sh-c0d0r schrieb:</p>
<blockquote>
<p>Anscheinend macht export etwas mit Anführungsstrichen das ich nicht verstehe.</p>
</blockquote>
<p>Das liegt nicht an export. Eine Variablendefinition weist der Variablen einen einzelnen String zu, das ist alles. Word splitting findet erst statt, wenn $TCMD irgendwo substituiert wird, das ist viel später und hat mit der Variablendefinition und mit export nichts zu tun.</p>
<p>Brauchst du überhaupt export? Vielleicht genügt dir ja auch eine normale Variablendefinition, in welchem Fall du auch ein alias nehmen könntest und keine Schwierigkeiten mit den &quot;&quot; hättest.</p>
<p>export vor einer Variablen markiert diese Variable so, dass auch child processes diese Variable in ihrer Umgebung haben. Deswegen sollte man export nur vor Variablen schreiben, die auch wirklich von child processes gesehen werden müssen. Verwendest du die Variable nur in deinem Shell-Skript, dann brauchst du kein export davorschreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897803</guid><dc:creator><![CDATA[Christoph]]></dc:creator><pubDate>Sun, 16 May 2010 10:37:31 GMT</pubDate></item><item><title><![CDATA[Reply to ich kann kein sh on Sun, 16 May 2010 10:44:16 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Danke für die ausführliche Antwort.</p>
<p>chrische</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897807</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 16 May 2010 10:44:16 GMT</pubDate></item><item><title><![CDATA[Reply to ich kann kein sh on Sun, 16 May 2010 10:45:17 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Christoph schrieb:</p>
<blockquote>
<p>export vor einer Variablen markiert diese Variable so, dass auch child processes diese Variable in ihrer Umgebung haben. Deswegen sollte man export nur vor Variablen schreiben, die auch wirklich von child processes gesehen werden müssen.</p>
</blockquote>
<p>ja, das würde gehen, danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897808</guid><dc:creator><![CDATA[sh-c0d0r]]></dc:creator><pubDate>Sun, 16 May 2010 10:45:17 GMT</pubDate></item></channel></rss>