問題タブ [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 - ダッシュで供給されているスクリプトへのパスを見つけるにはどうすればよいですか?
ソース化されたシェル スクリプトに独自の場所を決定させようとしていますが、これはダッシュにとって難しい作業であることがわかりました。
bash、sh、および csh では、次を使用できます$_
。
魚では、 を使用できます(status -f)
。
ダッシュで、私は運がなかった...
以下に示す path.sh ファイルのソースを試してみましたが、次の結果が得られました。
dash -c ". path.sh"
出力:
ダッシュでpath.shへのパスを取得するにはどうすればよいですか?
bash - echo を実行し、ダッシュ シェルで cat にリダイレクトします
Pythonコードでzipファイルを作成するワンライナーを作りたいです。ただし、Makefile で実行すると、デフォルトのシェル (ダッシュ) が使用されます。それは
しかし、bashでは完全にうまく機能します
cat <(echo '#!/usr/bin/env python') - in dashを表現する方法はありますか?
Makefileに追加できることを知っています
しかし、それは恒久的な解決策ではなく単なる回避策です。
dash-shell - ダッシュでsqliteデータベースから読み取る方法は?
bash では、これを使用して sqlite データベースから読み取ります。
残念ながら、これはダッシュでは機能しません - 方法はありますか?
bash - シェルスクリプトが含まれるディレクトリのみを変更できるようにする
私は、とりわけ、gitリポジトリを複製し、リポジトリ内でスクリプト(リポジトリとともに複製された)を実行するposix補完シェルスクリプトを作成しています。
例えば:
git clone git@github.com:torvalds/linux.git
cd linux
./Kconfig
アイデアは、人々が悪ではなく善のためにそれを使用するということですが、あなたが知っている..
rm -rf /
スクリプトの内部。
または、おそらく次のような少し悪さの少ないもの:
rm -rf ../../
クローンされたリポジトリ内のもののみを変更できるように、何らかの方法でスクリプトのアクセス許可を (クローン後に) 変更することは可能ですか?
arrays - POSIX 準拠シェルの配列
hyperpolyglot.org のこのリファレンス シートによると、次の構文を使用して配列を設定できます。
しかし、Ubuntuのデフォルトであるダッシュでエラーが発生し、/bin/sh
POSIX に準拠する必要があります。
リファレンス シートは誤解を招くものですか、それとも誤りですか?
はいの場合、配列またはリストを定義してPOSIXに準拠する正しい方法は何ですか?
bash - DASH で system() を介して指定されたコマンドに LD_PRELOAD が適用されませんが、BASH で動作します
LD_PRELOAD を使用していますが、system() コマンドを使用すると、bash とダッシュの違いが見られます。
この単純な C プログラムを考えてみましょう。
次のようにテストプログラムを開始します。
bashとdashの両方で、次のようになりました:
これまでのところ、dash がシェルの場合にシステムに与えられたコマンドに LD_PRELOAD が適用されないことを除けば、これで問題ありません。つまり
- /bin/sh が /bin/bash を指している場合、system() に指定されたコマンドに LD_PRELOAD が適用されます。
- /bin/sh が /bin/dash を指している場合、LD_PRELOAD は system() に指定されたコマンドに適用されません。
私の preload.so ライブラリは open() をオーバーライドします。bash を使用する場合 (/bin/sh=/bin/bash) はテスト プログラムで実行されますが、dash を使用する場合 (/bin/sh=/bin/dash) は実行されません。
bash と dash は、execve に渡される環境変数を異なる方法で処理する可能性があると推測していますが、dash を使用して、システムに指定されたコマンドに LD_PRELOAD を適用する方法を見つけることができません... 残念ながら、dash を使用する必要があり、bash を使用するのはオプションではありません。