실행하기 전에 한 줄씩 쓰고, 두 번 쓰지 마세요.

실행하기 전에 한 줄씩 쓰고, 두 번 쓰지 마세요.

옵션이 포함된 bash 스크립트를 작성했으며 --verbose실행하기 전에 대부분의 줄을 작성하고 싶습니다.

xinput --set-prop "$TP" "Device Accel Constant Deceleration" $TOUCHPAD_DECELERATION

따옴표가 포함된 출력을 얻고 싶지만 변수를 사용하여 실행하면 사용자가 명령을 복사하여 붙여넣어 다시 실행할 수 있습니다.

이것은 (명령에 따옴표가 많으면 점점 더 복잡해지는) 해결 방법으로, 줄을 두 번 작성합니다.

echo 'xinput --set-prop "'"$TP"'" "Device Accel Constant Deceleration" '"$TOUCHPAD_DECELERATION"
xinput --set-prop "$TP" "Device Accel Constant Deceleration" $TOUCHPAD_DECELERATION

이 줄의 결과를 두 번 쓰지 않고도 echo를 사용하여 어떻게 쓸 수 있나요?

답변1

이 옵션을 사용할 수 있습니다 set -x.set -x~ 할 것이다:

명령, 대/소문자 명령, 선택 명령 및 산술 명령을 포함한 간단한 명령의 추적과 해당 인수 또는 확장 후 및 실행 전 관련 단어 목록을 인쇄합니다. PS4 변수의 값이 확장되고 결과 값이 명령 및 확장된 인수 앞에 인쇄됩니다.

당신이 쓰는 경우 :

set -x
var="Hello world"
echo "I say: " $var

그러면 출력은 다음과 같습니다.

+ var='Hello world'
+ echo 'I say:' Hello world
I say: Hello world

+가치 PS4. 이를 억제하려면 행 PS4=뒤에 추가하거나 set -x다른 PS4값으로 설정하여 변경하십시오.

set -x로 활성화할 수도 있습니다 set -o xtrace. 옵션을 다시 비활성화하려면 를 사용하십시오 set +x.

일부 명령만 인쇄하려면 하위 쉘에서 실행할 수 있습니다.

( set -x ; echo "I say: " $var )
+ echo 'I say:' Hello world
I say: Hello world

명령을 괄호 안에 넣으면 set -x해당 명령에만 적용되며 마지막에는 자동으로 비활성화됩니다.

답변2

나는 다음과 같은 작업을 수행하기 위해 함수를 사용합니다.

#########################################################
# Function to facilitate printing of commands being run #
#########################################################
runthis(){
    echo "$@" 1>&2
    eval "$@"
}

이제 스크립트에서 명령을 실행하고 싶을 때마다 다음과 같이 실행합니다.

runthis xinput --set-prop \"$TP\" \"Device Accel Constant Deceleration\" \"$TOUCHPAD_DECELERATION\"

관련 정보