タグ付けされた質問 「dash」

Debian、Ubuntu、およびその他のLinuxディストリビューションで/ bin / shとして使用されるAlmquistシェルのPOSIX準拠の派生物であるダッシュシェル

4
ダッシュまたは他のシェルはbashよりも「高速」ですか?
私はいつも、bashの代わりにdashを使用することの唯一の利点は、dashが小さいことであり、したがって、dashの多くのインスタンスがブート時に高速に起動するだろうと考えていました。 しかし、私はいくつかの研究を行い、より速く実行されることを期待して、すべてのスクリプトをダッシュ​​に移行する人を見つけました。また、Ubuntu Wikiの記事DashAsBinShでこれを見つけました。 デフォルトのシェルを切り替える主な理由は効率性です。bashは、インタラクティブな使用に適した優れたフル機能のシェルです。確かに、それはまだデフォルトのログインシェルです。ただし、ダッシュボードと比較すると、起動と操作がかなり大きく、遅くなります。 最近、システム上の多くのことに多くのbashスクリプトを使用していますが、私の問題は、24時間年中無休で実行している特定のスクリプトがあることです。通常の使用法よりもC。 それは多くのバシズムを伴うかなり大きなスクリプトであるため、それらをPOSIXまたは他のシェルに移植するのは非常に時間がかかります(そしてPOSIXは個人的な使用にはあまり関係ありません)が、これのいくつかを減らすことができれば価値があるCPU使用率。のようsedな単純なbashismのような外部バイナリを呼び出す${foo/bar}、またはのgrep代わりに、考慮すべき他の事柄もあることを知っています=~。 TL; DRはダッシュと比較してbashの起動と操作が本当に遅いですか?bash よりも効率的な他のUnixシェルはありますか?
57 bash  performance  dash 


4
Dashでプロセス置換をエミュレートする方法は?
ではbash、Process Substitutionを使用して、プロセスの出力をディスクに保存されたファイルのように扱うことができます。 $ echo <(ls) /dev/fd/63 $ ls -lAhF <(ls) lr-x------ 1 root root 64 Sep 17 12:55 /dev/fd/63 -> pipe:[1652825] 残念ながら、プロセス置換はでサポートされていませんdash。 Process Substitutionダッシュでエミュレートする最良の方法は何でしょうか? 出力を一時ファイルとして保存したくない(/tmp/)ので、それを削除する必要があります。別の方法はありますか?


1
$ PATH環境変数の割合
私の$ PATHは次のようになります。 /home/torbjorr/deployed/vector/x86_64-GNU%2fLinux:/home/torbjorr/deployed/typewriter/x86_64-GNU%2fLinux:/home/torbjorr/deployed/mustudio/x86_64-GNU%2fLinux:/home/torbjorr/deployed/mathext/x86_64-GNU%2fLinux:/home/torbjorr/deployed/doxymax/x86_64-GNU%2fLinux:/home/torbjorr/deployed/c2tex/x86_64-GNU%2fLinux:/home/torbjorr/deployed/x86_64-GNU%2fLinux/wand:/home/torbjorr/deployed/x86_64-GNU%2fLinux/spellesc:/home/torbjorr/deployed/x86_64-GNU%2fLinux/projinit:/home/torbjorr/deployed/x86_64-GNU%2fLinux/herbs:/home/torbjorr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games bashでは、問題なくワンドを呼び出すことができます /home/torbjorr/deployed/x86_64-GNU%2fLinux/wand お気に入り $ wand (i) Mål från "main.cpp" har registrerats (i) Skapar katalog "__wand_targets_dbg" (i) Kör g++ "main.cpp" -fpic -L"/home/torbjorr/deployed" -g -Wall -std=c++11 -I"/home/torbjorr/deployed" -o "__wand_targets_dbg/cb-template ただし、bourneシェル互換モードでは、ワンドが見つかりません。 $ wand sh: 2: wand: not found 問題は、これらのパスの%記号のようです。この符号はURLエンコードによって追加されているため、有効なファイル名ではない場合でも、ディレクトリ名に「GNU / Linux」という名前を使用できます。shで名前を機能させること、またはshコマンドをbashとして機能させることは可能ですか?つまり、/ bashにシンボリックリンクされる/ bin / shコマンドで呼び出された場合でも、bashを同じように動作させます。
16 shell  path  dash  ash 


2
:とtrueの違いは何ですか?
でbash: $ type : : is a shell builtin $ type true true is a shell builtin それらは同じように見えますが、同じシステムトレースを提供しません。 $ strace : strace: :: command not found $ strace true execve("/bin/true", ["true"], [/* 82 vars */]) = 0 [snip] exit_group(0) = ? とを比較strace bash -c : 2>:.txtしてみましstrace bash -c true 2>true.txtたが、メモリの場所を除いて両者の違いを見つけることができませんでした。 …
15 bash  dash 

2
POSIXシェルの関数と変数の個別の名前空間
ダッシュでは、関数と変数は別々の名前空間にあるように見えます: fn(){ fn="hello world" } fn; echo "The value is $fn!" #prints: The value is hello world! fn; echo "The value is $fn!" #prints: The value is hello world! #the fn variable doesn't conflict with the fn function これはダッシュ固有の機能ですか、それともPOSIXの保証ですか?
13 shell  posix  dash 


4
/ bin / shのコロンで文字列を分割
私のdashスクリプトはの形式でパラメータを受け取りますhostname:port。つまり、 myhost:1234 一方、ポートはオプションです。 myhost ホストとポートを別々の変数に読み込む必要があります。最初のケースでは、私は行うことができます: HOST=${1%%:*} PORT=${1##*:} しかし、ポートが省略されている場合、それは2番目のケースでは機能しません。echo ${1##*:}空の文字列ではなく、単にホスト名を返します。 バッシュでは、私はできる: IFS=: read A B <<< asdf:111 しかし、それはでは機能しませんdash。 私は、上の文字列を分割することができ:、外部プログラムを(起動せずに、ダッシュではawk、trなど)?
9 shell  string  dash 

2
Linuxでの標準へのbashファイルのリダイレクトはシェル( `sh`)とどう違うのですか?
実行中にユーザーを切り替えるスクリプトを作成し、標準のファイルリダイレクトを使用して実行しました。そうuser-switch.shです... #!/bin/bash whoami sudo su -l root whoami で実行するとbash、期待した動作が得られます $ bash < user-switch.sh vagrant root ただし、スクリプトをshで実行すると、異なる出力が得られます $ sh < user-switch.sh vagrant vagrant なぜbash < user-switch.sh出力が異なるのsh < user-switch.shですか? ノート: Debian Jessieを実行している2つの異なるボックスで発生します

3
スクリプト出力の自己リダイレクトに相当するダッシュ
Bashでは、現在実行中のスクリプトの将来のすべての stdout出力をリダイレクトできます。たとえば、このスクリプトでは、 exec > >(logger -t my-awesome-script) echo 1 echo 2 echo 3 これはsyslogで終わります: Oct 26 01:03:16 mybox my-awesome-script[72754]: 1 Oct 26 01:03:16 mybox my-awesome-script[72754]: 2 Oct 26 01:03:16 mybox my-awesome-script[72754]: 3 しかし、これはBash固有であり、リダイレクトを備えたネイキッドexecはDashでは機能しないようです。 Syntax error: redirection unexpected Dashで、またはおそらく両方のシェルで機能させるにはどうすればよいですか?

1
$ @のパラメーター展開はshシェルでサポートされていませんか?
私はAUに関する質問への回答を投稿しました$@が、shシェルでのパラメーター展開が機能しないことがわかりました。 <infile xargs -d'\n' sh -c 'echo "${@%%/*}"' _ しかし、それはで正常に動作しbashます。これはshシェルの予想される動作ですか、そこでシェルを拡張するにはどうすればよいですか? さらに、-n1オプションでxargs一度にコマンドに渡すことができるのは1行だけであることはわかっていますが、sh展開できるかどうかに興味がありました$@。 <infile xargs -d'\n' -n1 sh -c 'echo "${0%%/*}"' infile 含む: A1 /B1/C1 A 2/B2/C2 A3/B3/C3
8 bash  shell  dash 

2
変数に改行が含まれているかどうかをテストします(POSIX)
一部のシェルはこの種のテストを受け入れることを知っています: t() { [[ $var == *$'\n'* ]] && res=yes || res=no printf '%s ' "$res"; } var='ab cd' t var='abcd' t echo 実行時: $ bash ./script yes no POSIX(ダッシュ)と同等の機能とは 以下は信頼できるテスト方法ですか? nl=' ' t() { case "$var" in *$nl* ) res=yes ;; * ) res=no ;; esac printf '%s ' …

1
ネストされたコマンドの格納されたリターンコードで終了すると、DashとBashで異なるリターンコードが発生するのはなぜですか?
ランニング bash -c 'bash -c "echo test1; exit 1;" &> /tmp/x; buildresult=$?; tail -n 100 /tmp/x; exit $buildresult;' で結果test1コンソールに印刷されてecho $?印刷するには1、コマンドが内部でどのように返す必要がありますので、正確である私の理解でいる[b/d]ash -cのに対し、返さ dash -c 'dash -c "echo test1; exit 1;" &> /tmp/x; buildresult=$?; tail -n 100 /tmp/x; exit $buildresult;' 結果は同じ出力になりますが、0に従って戻りますecho $?。 シェルとポータブルシェルプログラミングの理解を深めるために、この違いを理解したいと思います。 Ubuntu 17.10(Artful Aardvark)でbash4.4.12およびdash0.5.8-2.3ubuntu1 を使用しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.