リンクコマンドをコマンドに分割

リンクコマンドをコマンドに分割

&&他のコマンド(制御演算子、および||関連;する他のコマンドを含めることも含まない場合もあります)を入力として使用し、そのコマンドを「サブコマンド」に分割するコマンドはありますか?

たとえば、

echo 1 && ls --invalid-option 2>/dev/null || echo 3

次のように分類されます。

  • echo 1
  • ls --invalid-option 2>/dev/nullまたは多分ls --invalid-option
  • echo 3

答え1

構文解析シェルの構文は次のとおりです。巨大な仕事が簡単に終わらないことが多いです。

ただし、その行を一度実行したい場合は、次のようにシェルで実行することができますset -x

wsl@win10:~ $ set -x
wsl@win10:~ $ echo 1 && ls haha &> /dev/null; pwd
+ echo 1
1
+ ls --color=auto haha
+ pwd
/home/wsl
wsl@win10:~ $

ご存知のように、拡張alias機能(実際にはすべての拡張機能)という注意事項があります。

読者が実際のコマンド(ヒント:プラス記号とスペースで始まる行)を抽出することは、放課後の面白い小さな作業になる可能性があります。

答え2

非常に基本的で制限された方法でsedを使用してください。

# Utility functions: print-as-echo, print-line-with-visual-space.
pe() { for _i;do printf "%s" "$_i";done; printf "\n"; }
pl() { pe;pe "-----" ;pe "$*"; }

pl " Input data file $FILE:"
head $FILE

pl " Input data file $FILE, invisibles marked:"
cat -A $FILE

pl " Results:"
sed -e 's/[      ]*&&[   ]*/\n/g' -e 's/[       ]*||[   ]*/\n/g' $FILE

生産:

-----
 Input data file data2:
one-space && next-one || last-one

one-TAB &&      next-tab        ||      last-tab

mixed-tabs-space         &&             next-mixed        ||    last-mixed

-----
 Input data file data2, invisibles marked:
one-space && next-one || last-one$
$
one-TAB^I&&^Inext-tab^I||^Ilast-tab$
$
mixed-tabs-space ^I && ^I^Inext-mixed^I  ||  ^Ilast-mixed$

-----
 Results:
one-space
next-one
last-one

one-TAB
next-tab
last-tab

mixed-tabs-space
next-mixed
last-mixed

そのようなシステムでは:

OS, ker|rel, machine: Linux, 3.16.0-7-amd64, x86_64
Distribution        : Debian 8.11 (jessie) 
sed (GNU sed) 4.2.2

[ ] にはタブとスペースが含まれているため、これらのスペース文字はいくらでも許可されます。引用符付き文字列などは考慮しません。

頑張って...乾杯、drl

関連情報