옵션이 포함된 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\"