問題タブ [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.
dash-shell - シェルスクリプト入力リダイレクトの奇妙な点
誰でもこの動作を説明できますか? ランニング:
何も出力されませんが、次のようになります。
期待される出力を生成します。
パイプは、2 番目の例で test.file へのリダイレクトが行ったことを 1 ステップで行うべきではないでしょうか? ダッシュ シェルと bash シェルの両方で同じコードを試したところ、両方から同じ動作が得られました。
bash - バッシュ、ダッシュ、文字列の比較
単純なシェル スクリプトで 2 つの文字列を比較しようとしています。/bin/sh
の代わりにを使用していましたが/bin/bash
、何時間ものデバッグを行った後、sh (実際にはダッシュ) がこのコード ブロックを処理できないことがわかりました。
を使用して文字列を比較するポータブルな方法は何/bin/sh
ですか? != を使用していつでも反対のことができることはわかっていますが、よりクリーンでポータブルな方法について疑問に思っています。
linux - dash-execコマンドのPIDを見つける方法
注:bashを使用していると思いましたが、/ bin/shは/bin/ dashにリンクされており、この奇妙なexecの問題があります。
Linux上にサーバープロセス(作成も制御もしなかった)を起動するために使用される単純なbashシェルスクリプトがあり、bashシェルスクリプトに起動されたプロセスのPIDをpidfileに出力させたいと考えています。
問題は、bash-execコマンドが自身のプロセスを起動されたサーバープロセスに置き換えないことです。
それで:
ファイル内のpidはサーバープロセスではなくbashのpidになるため、これは機能しません。また、サーバープロセスが終了した場合、bashは終了せず、愚かな起動スクリプトがプロセスリストに表示されないままになる可能性があります。
誰かがbash(またはダッシュかもしれません)を使用する方法を知っていますか?
- 出来ますか?
- 起動されたサーバーサーバープロセスのPIDは私のpidfileにありますか?
- 起動されたサーバーが存在するときにbashスクリプトが終了し、無効なシェルプロセスがプロセスリストに残っていないことを確認しますか?
編集: bashリファレンスマニュアルからのこのスニペットは役に立ちます...
コマンドが指定されている場合、新しいプロセスを作成せずにシェルを置き換えます。-lオプションが指定されている場合、シェルはコマンドに渡された0番目の引数の先頭にダッシュを配置します。これは、ログインプログラムが行うことです。-cオプションを指定すると、コマンドは空の環境で実行されます。-aを指定すると、シェルはnameをコマンドの0番目の引数として渡します。コマンドが指定されていない場合、リダイレクトを使用して現在のシェル環境に影響を与えることができます。リダイレクションエラーがない場合、リターンステータスはゼロです。それ以外の場合、戻りステータスはゼロ以外です。
編集2:これはスクリプトです(サニタイズされています):
そして、いくつかのps出力はおそらくもっと明確になりますか?
shell - ファイル名のタブ補完をダッシュの大文字と小文字を区別しないように設定する
ダッシュ シェルのファイル名のタブ補完機能を使用してファイル名を完成させています。ただし、ダッシュの大文字と小文字を区別するデフォルトのタブ補完です。ダッシュの大文字と小文字を区別しないファイル名のタブ補完を強制するにはどうすればよいですか?
bash では、/etc/inputrc に「set completion-ignore-case on」を追加できますが、dash では効果がありません。助言がありますか?
bash - 二重リダイレクト テスト
これはあなたのシェルを何に出力しますか?
echo foo | bar
またはに評価されると予想しますがfoo < <(bar)
、どちらもエラーメッセージが表示されます。
Bash 4.1.5 では、パイプが単純に破棄されているように見えます。
ダッシュ中:
bash - スクリプトをbashからdashに移行する方法は?
Debian6を新しくインストールするたびにbashをインストールすることは避けたいです。したがって、すべてのbashスクリプトをダッシュに変換する必要があります。
-どうしますか?
--2つの言語の違いは何ですか?
-注意点と落とし穴を知っていますか?
-そのタスクを自動化することは可能ですか?
ubuntu - `sh -c`でリダイレクトを使用して非ASCIIファイルを作成する方法は?
同じコマンド:echo 1 > filename
異なるファイル名を作成します:
と
文字はどこс
にありますかU+0441
— CYRILLIC SMALLLETTERES。エンコーディングsh
の2番目のバイトを消費することは明らかです。utf-8
$LANG
どちらの場合も:
sh
私のシステムにリンクさdash
れています:
stty iutf8
が設定されます。
dash
マルチバイト文字を壊さないようにする設定はありますか?
マニュアルに文字エンコードについての言及はありません:
アップデート
utf-8エンコーディングの文字
の2番目のバイト'\201'
は、 Cではsigned char(またはunsigned char)です。'с'
-127
129
ソースコード(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+patches
rmescapes()
で削除されたことを示していますrelease-patches
:
これらの変更がdash 0.5.6.1
Ubuntuに含まれるかどうかは不明です。
今のところ、コマンドを作成する唯一の方法は次のとおりです。
動作することは、次のように再構成sh
することbash
です。
他に選択肢はありますか?
linux - Linux シェルスクリプトでの for ループの構文
for ループの実装に問題があります。スクリプトを実行すると、このエラーが発生します
test1.sh: 2: 構文エラー: ループ変数が正しくありません
このエラーがわかりません。
これは私のスクリプトです
sh(ubuntuではダッシュシェルにリンク)のforループの構文を教えてもらえますか?ubuntuのシェル?
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 でどのように機能するかについての説明を歓迎しますか?
posix - POSIX sh リダイレクト
小さな何かが欠けているかもしれませんが、POSIX (ダッシュ) 準拠の方法でこの構文を実現することは可能ですか?
ダッシュでは使用できないことはわかっていますが、使用する必要があります>&
が、2>&1
これはしたくありません。stdout に大量のデータが送られてきますが、それを解析して stderr を取得したくありません。非常に単純なものが欠けているように感じますが、指を置くことはできません...
現在、上記のコマンドを実行すると、標準出力 (3) が数行しか表示されませんが、標準エラー出力ファイルには表示され、標準出力は空です。また、グループ化のさまざまな方法を試しましたが、それでもうまくいきませんでした。何が起こっているのかわからない...
アップデート
これは、私が達成しようとしていることの完全な効果を見ることができるように、私が実行している実際のコマンドの形式です:
これは、() を使用してグループ化の複数のバリエーションを試したことを述べた場所です。また、実行可能ファイルmyApp
はフォークしません。
このコマンドは機能すると思いましたが、そうではないことがわかりました。