コマンド置換を使用して複数のコマンドを実行する


2

私はbashでやろうとしていますことは、スクリプトを記述しているfoo私が実行したときにということ、$(foo)それはディレクトリを変更し、使用してスクリプトを実行しますsource。の内容foo

echo cd bar
echo "&&"
echo source baz

実行すると$(foo)、ディレクトリが「bar」に変更されますが、実行されませんsource baz。これを達成する方法はありますか?


2
さらに、なぜあなたはそれをしたいのですか?これは少し工夫されているようで、必要なものを達成するためのより良い方法があると確信しています。
slhck

@slhckスクリプトまたはプログラム内からシェルに影響を与えることはできません。シェルに影響を与える唯一の方法は、コマンド置換またはsourceを使用することです。そのため、その方法を見つけようとしています。
ケビンマルソレー

最初に実行するコマンドを変数に保存するのはなぜですか?
-chepner

回答:


2

eval出力する必要があります:

eval $(foo)

それ以外の場合、&&(または他の同様の言語要素)は、引用符で囲まれているように扱われます:への通常の引数cd

$ echo $(foo)
cd bar && source baz

先頭のをスキップechoするcdと、これは4つの引数bar && source bazで実行され、最初のものを除いてすべて静かに削除します。


アプリケーションによっては、これはあまり良い考えではないことに注意してください。
ダニエルベック

最もエレガントなソリューションではないにしても、動作しているようです。ありがとう。
ケビンマルソレー

0

エイリアスを使用して(man bashも参照)、目的の処理を実行できます。

alias foo='cd bar && source baz'

fooを実行すると、ディレクトリがbarおよびsource bazに変更されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.