/bin/touch $FLAG를 사용하여 파일을 생성할 수 없습니다. 발생한 오류는 /bin/touch: 누락된 파일 피연산자입니다.

/bin/touch $FLAG를 사용하여 파일을 생성할 수 없습니다. 발생한 오류는 /bin/touch: 누락된 파일 피연산자입니다.
PATH=/opt/omd/sites/icinga/var/TEST
FLAG="$PATH/$1_$3.flag" | tr -d \'

작은따옴표가 있는데 $3이를 제거하고 싶습니다. 따라서 위의 tr -d \'.

다음으로 다음을 실행했습니다.

/bin/touch $FLAG

그리고 얻다:

/bin/touch: missing file operand Try '/bin/touch --help' for more information. 

나도 시도했다

/bin/touch "$FLAG" 

하지만 문제가 no such file or directory발생했습니다. 누구든지 나를 안내할 수 있나요?

답변1

두 가지 질문이 있습니다.


주요 문제:

변수 할당작동하지 않습니다당신이 생각하는 것처럼 :

FLAG="$PATH/$1_$3.flag" | tr -d \'

이는 로 구분된 두 개의 명령입니다 pipe. 이는 첫 번째 명령(변수 할당)의 출력을 두 번째 명령( )으로 보내는 것을 의미합니다 tr. 두 번째 명령은 단순히 결과를 인쇄합니다. 변수 할당의 출력이 비어 있으므로 의 출력 tr도 비어 있습니다.

변수 할당은 실제로 작동하지만 의 일부이기 때문에 pipe별도의 프로세스에서 실행되며 touch기본 프로세스(예를 들어 그 뒤의 명령 포함)에 액세스할 수 없습니다.

명령을 포함한 변수 할당에는 다음을 사용해야 합니다.명령 대체:

FLAG="$(printf '%s' "$PATH/$1_$3.flag" | tr -d \')"

당신은 또한 볼 수 있습니다.


두 번째 용어변수 를 재정의한다는 것입니다 PATH.

PATH=/opt/omd/sites/icinga/var/TEST
FLAG="$PATH/$1_$3.flag" | tr -d \'

이제 tr작동하지 않으며 다음 오류가 발생합니다.

tr: command not found

좋은 추가 정보도 얻었지만 이는 bashUbuntu일 수 있습니다.

Command 'tr' is available in the following places
 * /bin/tr
 * /usr/bin/tr
The command could not be located because '/usr/bin:/bin' is not included in the PATH environment variable.

이 문제를 해결하려면 다음과 같은 문제도 발생하지 마십시오.유제, 따르다bash 변수 명명 규칙:

path=/opt/omd/sites/icinga/var/TEST
flag="$(printf '%s' "$path/$1_$3.flag" | tr -d \')"

관련 정보