問題タブ [command-substitution]
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.
bash - bashでチルダ展開と変数置換を組み合わせる
root として bash を実行していて、ユーザーのホーム ディレクトリを chown したいとしますada
。ada
という変数に格納されているとも言います$USER
(これはスクリプトから実行しているためです)。
以下を試したところ、
/home/root/ada
シェルは最初にチルダ展開を実行したため、 ではなくchown を試みました/home/ada
。
ネストされた置換と適切なエスケープでそれを行う方法はありますか?
bash - 空白で区切られた一連の単語ではなく、単一の文字列として STDOUT をパイプ/消費する
正規表現置換を使用して結果のファイル名を計算する perl ワンライナーを採用したいと思います。ドライランを実行して結果を単に印刷すると、望ましい結果が得られます(まだ引用符はありません):
for i in *_\ *; do echo "${i}" $(perl -ne 'print s/(?<![_ ])_ /-/gr' <<< "${i}"); done
しかし、それに変更するmv
と壊れます:
for i in *_\ *; do mv "${i}" $(perl -ne 'print s/(?<![_ ])_ /-/gr' <<< "${i}"); done
mv: target ‘9781430249146.pdf’ is not a directory
どうやら perl の出力が再解釈され、空白が問題を引き起こしているようです。二重引用符で囲むと、perl コードが最初に bash によって評価されるため、別の問題が発生します。
for i in *_\ *; do mv "${i}" "$(perl -ne 'print s/(?<![_ ])_ /-/gr' <<< "${i}")"; done
-bash: ![_: event not found
(コマンド自体ではなく) コマンド置換からの出力だけを引用する方法はありますか?
bash - 文字列置換によるコマンド置換
次の行に沿って何かをすることは可能ですか:
そのようなものの実際の例をどこかで見たと確信していますが、これにより「不適切な置換」エラーが発生します。
それを行うには他の方法があることは知っていますが、そのような短いワンライナーは役に立ちます。私は何かを逃していますか、それともこれは不可能ですか?
bash - bash コマンド置換内からのスクリプト ロジック
スクリプトに次のスニペットがあります。
他の場所では、ファイル記述子を介して PIN を渡す必要があるため、ここではリダイレクトとコマンド置換を行います。
の出力validate_pin
は、入力された PIN の変更された値ですが、終了コードによって、それが成功して有効であったかどうかが決まります。error_handler
障害を管理するために何を入れることができますか?
私が持っている場合exit
、コマンド置換サブシェルのみを終了します。コマンド置換サブシェルが閉じられるとすぐに、割り当てられた変数 (FAIL=1
など) も消去されます。ファイル記述子を読み取って動作を確認することはできますが、その後閉じられ、後続のプロセスはそれを使用できません。
bash - Bash IFS ('\n'): find コマンドと for ループによるファイル名検出の問題
コマンド置換は正しく行われていますか? 変数は for ループの IFS \n では機能しません。なぜこれが発生するのかわかりません。
for ループは、find の出力を行ごとに処理することにより、空白を含むファイル名を処理することになっています (これが、IFS \n を使用する理由です)。
bash - コマンド置換を使用するスクリプト/コマンド/エイリアスの追加
実行できるようにしたいコマンドがあり、通常は Mac の起動時に実行します。私がやろうとしていた方法は、でエイリアスを作成することでした~/.bash_profile
:
boot2docker shellinit
実行する必要があるいくつかのコマンドを出力します。例えば:
私が抱えている問題は、新しいシェルが開かれたときに$(boot2docker shellinit)
が実行され、上記のexport
コマンドも実行されるか、boot2docker VM がアクティブでない場合に失敗することです。
これを整理する正しい方法 (エイリアス、スクリプトなど) と、コマンド置換を使用することが正しい方法である場合はどうすればよいですか?
bash - Bash での tty のコマンド置換
指示:
出力:
指示:
出力:
現在の端末に接続されているファイルは/dev/pts/0
です。両方のコマンドが同じ出力を生成するべきではありませんか? ここで何が欠けていますか?