問題タブ [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.
shell - sh -cのコマンド引数で引用符をエスケープする方法は?
シェル コマンド cmd には、空白と一重引用符と二重引用符を含めることができます。
これらの引用符をエスケープして、コマンドを POSIX シェルに正しく渡す方法:
>dash -c '
コマンド'
二重引用符として指摘されているもう1つの質問は、二重引用符について尋ねます。そこにある答えの1つはおそらくうまくいくでしょう-コマンドを分割し、連結された引用符を使用することです。たとえば、cmd が
次に、それを次のように変換します
これは厄介です...もっと簡単な方法はありませんか?
追加: 誰も私を理解していないようです... 入力、文字列 (完全に正確には、ASCII テーブルの 0 から 127 までの印刷可能な ASCII 文字から作成) を受け取る一般的な手順、アルゴリズムが必要なだけです。 2 番目の文字列を出力します。要件は、最初の文字列がこのように実行される場合
結果は同じです
私は今より明確になりましたか、教えてください。
bash - リグレッション: エクスポートされた Bash 関数が別のプロセスを通過した後に失われる
Ubuntu 14.04 から 16.04 に移行するときに、エクスポートされた関数が見つからないために、いくつかの Bash スクリプトが失敗していることに気付きました。これはシェルショックのバグの修正に関係しているのでしょうか, 私は関数を単純に説明export -f
し、Bash 内部の関数表現に依存していません. 障害は、間に別のプロセスがある場合にのみ、直接の Bash サブシェルでは発生しません。たとえば、 awk / Perl / Vim を呼び出す Bash は別の Bash を呼び出します。Perl の例を次に示します。
良い
悪い
私は何か間違ったことをしていますか、それともこれはバグですか?
編集:@chepnerは、Bashが特別な名前のシェル識別子を使用して関数を保存していることを指摘しました。dash
(0.5.8-2.1ubuntu2、0.5.7-4ubuntu1 での作業) を通過すると、これらの識別子は削除されます。でksh
、それらは生き続けます。で確認しました
:set shell=/bin/bash
同様に、Vim の動作は/で変更できます。:set shell=/bin/ksh
それで、dash
責任がありますか?
bash - bash: 同じ行でエイリアスを設定して使用することはできません
foo
2行目の代わりに次のように言うと思いcommand not found
ます:
2行目はなぜ言わないのfoo
ですか?次のシェルでテスト済み、同じ動作:
- バッシュ 3.2.5
- zsh 5.0.8
- ダッシュ 0.5.9
- ビジーボックス 1.25.0
shell - ダッシュ文法が空でない改行文法記号を含む for ループを受け入れないのはなぜですか? これはダッシュ バグですか?
シェルの下dash
で、なるほど
の POSIX シェル文法
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_10_02
もっている
for_clause :
(...)
| For name linebreak in
(...)
solinebreak
は空である必要はありませんが、改行にすることができます。では、なぜそのエラーが表示されるのでしょうか? これはdash
バグですか?
bash
はこの例を受け入れますが、明らかにこの例は「bash-ism」とは何の関係もありません。これは基本的な POSIX シェル構文であり、 と の両方に共通dash
ですbash
。
bash - 「bash -c」対「dash -c」
dash -c
とは異なる動作をしbash -c
ます:
この違いの説明はありますか?
debian - 「make」と入力して「dash-to-dock」をコンパイルすると、このエラー出力が表示されました
誰かが私を助けることができますか?
dash-shell - 関数の戻り値を置き換える簡潔な方法はありますか?
dash
継承したシェル スクリプトの単体テストをいくつかまとめています。追加する多数のテストを考慮して、それらをできるだけ簡潔に保ちたいと考えています。
これを行うcheck
ために、テストの成功または失敗を処理するヘルパー関数を追加しました。基本的には、前のコマンドからの戻りコードを受け取り、それに$?
基づいてテストを成功または失敗させます。これにより、次のようにワンライナー テスト (多数あります)を簡単に実装できます。
各テストが 1 行にまとめられるので、これはかなり良いことですが、完璧を求める私の OCD の探求では、削減の余地がさらにあるのではないかと思います。
bash
のように、コマンドを実行し、その出力を別のコマンドで使用する機能があることを知っています。
しかし、コマンドの戻りコードでこれと同じ置換を行う方法があるかどうか疑問に思っていました。
これは、私のテスト行から、次のよう$?
に変更して、厄介な繰り返しを削除できることを意味します。
次のようなものに:
where$[]
は神話上の「リターン コードを使用する」置換演算子です。
この機能はありますかdash
、それとも私が現在行っているよりも簡潔な方法はありますか?
他のシェルはここではオプションではないことに注意してください。これは、dash
提供されている唯一のシェルである組み込みシステムです。