に、私は(コマンドを実行せずに)その内容とsource *.sh
を置き換えることができますどのようには、script.shではbashの
source a.sh
source b.sh
CMD1
CMD2
CMD3
をその内容と「ソースファイルの交換」、および変数を拡大しますか? 私は、ファイルのソースとすべての変数を展開した後にbashインタープリタが実行するものを見たいと思います。
私はset -n -v
を使用するか、bash -n -v script.sh 2>output.sh
を実行できますが、ソースコマンドを置き換えることはできません(さらに、a.shまたはb.shに変数が含まれている場合は少なくなります)。
私はサブシェルを使用すると考えましたが、それでもソース行は展開されません。ソース行の前後にset +n +v
とset -n -v
の組み合わせを試しましたが、それでも動作しません。
私はその出力をsshを使用してリモートマシンに送信します。 <<output.sh
を使ってコンテンツをsshコマンドにパイプすることができますが、リモートマシンにrootとしてログオンできませんが、私はsudoerです。 はしたがって、私は解決策があります base64 script | ssh remotehost 'base64 -d | sudo bash'
(that clever trickを使用して)私は、スクリプトを作成して、base64でエンコードされた文字列として送信することができると思いましたか? それとも良いアイデアはありますか?
を実行することができますが、あなたは、あなたのソリューションを試してみました。 shは変数を定義し、main.shは 'echo cc'の後にそれを呼び出します。 変数が拡張されるとは思わない。 はい、私はすでに-xについて知っています。 スクリプトは私のものではなく、リモートマシン上で実行されることを意図していますが、プログラムで書くことができます(変数とある種のインクルード) –
答えを更新しました。値を展開する必要はありません。ソースファイルに 'source'が含まれていない限り、定義をインライン化するだけで済みます。この場合、リモートとローカルの違いは何ですか?例えば。 'ssh user @ host -t" bash -x -c 'echo hi' "' – dimid