[解決済み] 現在のシェル内でコマンドの出力を実行するには?
質問
私は
source
(別名
.
) ユーティリティで、ファイルから内容を取り出して、現在のシェル内で実行します。
では、次のようにテキストをシェルコマンドに変換し、実行しています。
$ ls | sed ... | sh
ls
はランダムな例で、元のテキストは何でもかまいません。
sed
も、テキストを変換するための単なる例です。面白いのは
sh
. 私は、私が得たものを何でもパイプで
sh
にパイプすると、それが実行されます。
私の問題は、それが新しいサブシェルを開始することを意味することです。私はむしろ、現在のシェル内でコマンドを実行させたいと思います。私ができるようになるように
source some-file
もし私がテキストファイルにコマンドを持っているならば。
テンポラリファイルは汚く感じるので作りたくないです。
あるいは、現在のシェルとまったく同じ特性でサブシェルを起動したいのですが。
更新
OK、backtickを使った解決策は確かに機能しますが、私はしばしば出力をチェックしたり変更したりしながらこれを行う必要があるので、最終的に結果を何かにパイプする方法があればもっといいと思います。
悲しい更新
あ、その
/dev/stdin
のようなものはとてもきれいに見えましたが、もっと複雑なケースでは、うまくいきませんでした。
というわけで、こんな感じです。
find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/git mv -f $1 $2.doc/i' | source /dev/stdin
これは、すべての
.doc
ファイルの拡張子が小文字になるようにします。
で処理することができます。
xargs
で処理できますが、それはさておき。
find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/$1 $2.doc/i' | xargs -L1 git mv
で、前者を実行すると、すぐに終了してしまい、何も起こりません。
どうすれば解決しますか?
$ ls | sed ... | source /dev/stdin
UPDATEです。
これはbash 4.0、tcsh、dashで動作します(もしあなたが
source
を
.
). どうやらbash3.2ではバグがあったようです。 からは
bash 4.0 リリースノート
:
デバイスや名前付きパイプなどの非正規ファイルからのコマンドの読み込みと実行に `.' が失敗するバグを修正しました。
関連
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] シェルで、「2>&1」はどういう意味ですか?
-
[解決済み] ワイルドカードマッチングに基づいて、現在のフォルダとサブフォルダ内のすべてのファイルを再帰的に検索するにはどうすればよいですか?
-
[解決済み] Bashでコマンドの出力に変数を設定するにはどうすればよいですか?
-
[解決済み] あるディレクトリにあるすべてのコード行を再帰的にカウントするにはどうすればよいですか?
-
[解決済み] Git上でシェルコマンドを実行する際に使用するSSH-keyの秘密鍵を指定する方法は?
-
[解決済み] シェルコマンドの実行と出力のキャプチャ
-
[解決済み] スクリプトの実行に関連したファイルの参照
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] bash に次の行に進むように指示する方法
-
[解決済み] シェルプログラミングで「export」は何をするのですか?重複
-
[解決済み] Makefileでシェルコマンドを使用する方法
-
[解決済み] Ansibleで新しいユーザーとパスワードを作成する
-
[解決済み] このbashのフォーク爆弾はどのように機能するのでしょうか?重複
-
[解決済み] ENV 変数やデフォルト値を使って Makefile の変数を定義する
-
[解決済み] Bash で +x を表示させずに設定する
-
[解決済み] Bashでコマンドライン引数を変更するには?
-
[解決済み] sed を使ってファイルの名前を大量に変更する
-
[解決済み] BashやShellスクリプトで関数の前方宣言を行うには?