問題タブ [dash-shell]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
9 に答える
6223 参照

dash-shell - シェルスクリプト入力リダイレクトの奇妙な点

誰でもこの動作を説明できますか? ランニング:

何も出力されませんが、次のようになります。

期待される出力を生成します。

パイプは、2 番目の例で test.file へのリダイレクトが行ったことを 1 ステップで行うべきではないでしょうか? ダッシュ シェルと bash シェルの両方で同じコードを試したところ、両方から同じ動作が得られました。

0 投票する
5 に答える
41399 参照

bash - バッシュ、ダッシュ、文字列の比較

単純なシェル スクリプトで 2 つの文字列を比較しようとしています。/bin/shの代わりにを使用していましたが/bin/bash、何時間ものデバッグを行った後、sh (実際にはダッシュ) がこのコード ブロックを処理できないことがわかりました。

を使用して文字列を比較するポータブルな方法は何/bin/shですか? != を使用していつでも反対のことができることはわかっていますが、よりクリーンでポータブルな方法について疑問に思っています。

0 投票する
2 に答える
4448 参照

linux - dash-execコマンドのPIDを見つける方法

注:bashを使用していると思いましたが、/ bin/shは/bin/ dashにリンクされており、この奇妙なexecの問題があります。

Linux上にサーバープロセス(作成も制御もしなかった)を起動するために使用される単純なbashシェルスクリプトがあり、bashシェルスクリプトに起動されたプロセスのPIDをpidfileに出力させたいと考えています。

問題は、bash-execコマンドが自身のプロセスを起動されたサーバープロセスに置き換えないことです。

それで:

ファイル内のpidはサーバープロセスではなくbashのpidになるため、これは機能しません。また、サーバープロセスが終了した場合、bashは終了せず、愚かな起動スクリプトがプロセスリストに表示されないままになる可能性があります。

誰かがbash(またはダッシュかもしれません)を使用する方法を知っていますか?

  1. 出来ますか?
  2. 起動されたサーバーサーバープロセスのPIDは私のpidfileにありますか?
  3. 起動されたサーバーが存在するときにbashスクリプトが終了し、無効なシェルプロセスがプロセスリストに残っていないことを確認しますか?

編集: bashリファレンスマニュアルからのこのスニペットは役に立ちます...

コマンドが指定されている場合、新しいプロセスを作成せずにシェルを置き換えます。-lオプションが指定されている場合、シェルはコマンドに渡された0番目の引数の先頭にダッシュを配置します。これは、ログインプログラムが行うことです。-cオプションを指定すると、コマンドは空の環境で実行されます。-aを指定すると、シェルはnameをコマンドの0番目の引数として渡します。コマンドが指定されていない場合、リダイレクトを使用して現在のシェル環境に影響を与えることができます。リダイレクションエラーがない場合、リターンステータスはゼロです。それ以外の場合、戻りステータスはゼロ以外です。


編集2:これはスクリプトです(サニタイズされています):

そして、いくつかのps出力はおそらくもっと明確になりますか?

0 投票する
0 に答える
830 参照

shell - ファイル名のタブ補完をダッシュ​​の大文字と小文字を区別しないように設定する

ダッシュ シェルのファイル名のタブ補完機能を使用してファイル名を完成させています。ただし、ダッシュの大文字と小文字を区別するデフォルトのタブ補完です。ダッシュの大文字と小文字を区別しないファイル名のタブ補完を強制するにはどうすればよいですか?

bash では、/etc/inputrc に「set completion-ignore-case on」を追加できますが、dash では効果がありません。助言がありますか?

0 投票する
1 に答える
743 参照

bash - 二重リダイレクト テスト

これはあなたのシェルを何に出力しますか?

echo foo | barまたはに評価されると予想しますがfoo < <(bar)、どちらもエラーメッセージが表示されます。

Bash 4.1.5 では、パイプが単純に破棄されているように見えます。

ダッシュ中:

0 投票する
2 に答える
9049 参照

bash - スクリプトをbashからdashに移行する方法は?

Debian6を新しくインストールするたびにbashをインストールすることは避けたいです。したがって、すべてのbashスクリプトをダッシュ​​に変換する必要があります。
-どうしますか?
--2つの言語の違いは何ですか?
-注意点と落とし穴を知っていますか?
-そのタスクを自動化することは可能ですか?

0 投票する
1 に答える
461 参照

ubuntu - `sh -c`でリダイレクトを使用して非ASCIIファイルを作成する方法は?

同じコマンド:echo 1 > filename異なるファイル名を作成します:

文字はどこсにありますかU+0441CYRILLIC SMALLLETTERES。エンコーディングshの2番目のバイトを消費することは明らかです。utf-8

$LANGどちらの場合も:

sh私のシステムにリンクさdashれています:

stty iutf8が設定されます。

dashマルチバイト文字を壊さないようにする設定はありますか?

マニュアルに文字エンコードについての言及はありません:

アップデート

utf-8エンコーディングの文字 の2番目のバイト'\201'は、 Cではsigned char(またはunsigned char)です。'с'-127129

ソースコード(apt-get source dash)で検索すると、次のようになり-127ます。

次のフラグメントにつながるマクロへのCTLESCリードを検索します。rmescapes()src/expand.c:expandarg()

TODOそしてXXX、より新しいバージョンが役立つかもしれないことを示唆しています。debian/dash.README.sourceに指差す:

2つのブランチがあります:

エスケープdebian-sidバイトで削除されます。release+patches ブランチで欠落しgrepているバイトを見つけます。

git diff debian-sid...release+patchesrmescapes()で削除されたことを示していますrelease-patches

これらの変更がdash 0.5.6.1Ubuntuに含まれるかどうかは不明です。

今のところ、コマンドを作成する唯一の方法は次のとおりです。

動作することは、次のように再構成shすることbashです。

他に選択肢はありますか?

0 投票する
4 に答える
33474 参照

linux - Linux シェルスクリプトでの for ループの構文

for ループの実装に問題があります。スクリプトを実行すると、このエラーが発生します

test1.sh: 2: 構文エラー: ループ変数が正しくありません

このエラーがわかりません。

これは私のスクリプトです

sh(ubuntuではダッシュシェルにリンク)のforループの構文を教えてもらえますか?ubuntuのシェル?

0 投票する
2 に答える
5079 参照

linux - Linux および BSD でのシバンの有無にかかわらず Bash スクリプトの実行

Bash に似たスクリプトがシバンなしでバイナリとして実行された場合、実行する内容を誰がどのように決定するのでしょうか?

シバンで通常のスクリプトを実行すること、シバンをチェックし、コマンドラインを解析し、指定されたスクリプトインタープリターを実行するbinfmt_script Linux モジュールで処理されると思います。

しかし、誰かがシバンなしでスクリプトを実行するとどうなるでしょうか? 直接的なexecvアプローチをテストしたところ、そこにはカーネル マジックがないことがわかりました。つまり、次のようなファイルです。

execv呼び出しだけを行うコンパイル済みの C プログラムを実行すると、次の結果が得られます。

ただし、別のシェル スクリプトから同じことを行うと、元のシェル インタープリターと同じシェル インタープリターを使用してターゲット スクリプトが実行されます。

他のシェル (たとえば、Debian のデフォルトsh- /bin/dash) で同じトリックを行うと、それも機能します。

不思議なことに、zsh では期待どおりに動作せず、一般的なスキームに従っていません。/bin/sh結局、そのようなファイルに対して実行された zsh のように見えます:

ZSH_VERSION親スクリプトでは機能しZSH_VERSIONましたが、子スクリプトでは機能しなかったことに注意してください。

シェル(Bash、dash)は、シバンがないときに実行されるものをどのように決定しますか? 私は Bash/dash ソースでその場所を掘り下げようとしましたが、残念ながら、私はそこで迷っているようです。シバンのないターゲットファイルをスクリプトとして実行するか、Bash/dashのバイナリとして実行するかを決定する魔法に誰かが光を当てることができますか? または、カーネル/libc との何らかの相互作用があり、それが Linux および FreeBSD カーネル/libcs​​ でどのように機能するかについての説明を歓迎しますか?

0 投票する
1 に答える
2986 参照

posix - POSIX sh リダイレクト

小さな何かが欠けているかもしれませんが、POSIX (ダッシュ) 準拠の方法でこの構文を実現することは可能ですか?

ダッシュでは使用できないことはわかっていますが、使用する必要があります>&が、2>&1これはしたくありません。stdout に大量のデータが送られてきますが、それを解析して stderr を取得したくありません。非常に単純なものが欠けているように感じますが、指を置くことはできません...

現在、上記のコマンドを実行すると、標準出力 (3) が数行しか表示されませんが、標準エラー出力ファイルには表示され、標準出力は空です。また、グループ化のさまざまな方法を試しましたが、それでもうまくいきませんでした。何が起こっているのかわからない...

アップデート

これは、私が達成しようとしていることの完全な効果を見ることができるように、私が実行している実際のコマンドの形式です:

これは、() を使用してグループ化の複数のバリエーションを試したことを述べた場所です。また、実行可能ファイルmyAppはフォークしません。

このコマンドは機能すると思いましたが、そうではないことがわかりました。