링크 명령을 명령으로 분할

링크 명령을 명령으로 분할

&&다른 명령(제어 연산자 , ||;관련된 다른 명령을 포함하거나 포함하지 않을 수 있음)을 입력으로 사용하고 해당 명령을 "하위 명령"으로 나누는 명령이 있습니까 ?

예를 들어:

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

관련 정보