やりたいこと
sh
1処理1 && 処理2 && 処理3 && 処理X 2```の出力が 3```ここに言語を入力 4処理1 5処理2 6処理3 7```であるような処理Xを書きたい。 8 9つまり一般に、ターミナルにおいて、ある(一連の)コマンド__c__はこの__c__という文字列を内部で扱うことができますか? 10(それさえできれば、awkなどを使って%%で区切ることは簡単なのでやりたいことが達成できます)
例えば
処理1がls
処理2がls -1
処理3がls -lAF
だったとします。
すると、
ls && ls -1 && ls -lAF && 特殊なコマンドX
で
ls
ls -1
ls -lAF
と表示させるような特殊なコマンドXが作れないか?ということですよね?
残念ですがそのような特殊なコマンドXは作成できません。特殊なコマンドXが受け取れる文字列はあくまで、特殊なコマンドXの起動に使われる文字列だけなので、この例で言えば&&以前の文字列は受け取れないからです。
このようなことをしたい場合、
COMMANDS="ls && ls -1 && ls -lAF"
echo "$COMMANDS"
eval "$COMMANDS"
のような方法はどうでしょう?処理したいコマンドを文字列として変数に格納し、表示をechoで、実行をevalでするということです。
表示が1行で&&を残したままとなり、要件と異なるので注意してください。
またevalはどの言語でもセキュリティ懸念があるので、慎重に使いましょう。
なお一度文字列にするので、変数展開やエスケープがややこしくなる傾向もあります。