cd /u01/saddy | printf '%s\n' "XYZ.ABC.V.$(date -d '2020-06-14 +1 day' +%Y%m%d)"*.batch ;
putty
경로를 통해 위 명령을 실행하면 /u01/saddy
명령이 제대로 실행되고 예상되는 출력이 제공됩니다.
XYZ.ABC.V.20200615180200.batch
하지만 집 위치에서 명령을 실행하려고 하면 명령이 다음과 같이 출력을 반환합니다.
XYZ.ABC.V.20200615*.batch
위치에 있는 파일은 /u01/saddy
다음과 같습니다.
XYZ.ABC.V.20200615180200.batch,
XYZ.ABC.V.20200616190100.batch,
XYZ.ABC.V.20200617140200.batch.
답변1
cmd1 | cmd2
두 개의 서로 다른 프로세스에서 동시에 실행되고 cmd1
출력 cmd2
이 cmd1
입력으로 파이프됩니다.cmd2
그래서:
cd /some/dir | printf '%s\n' some-glob
별 의미가 없습니다. 이는 다른 프로세스에서 일부 glob의 확장을 인쇄하는 동안 일부 (임시) 프로세스의 현재 작업 디렉터리를 변경합니다.
cd
의 출력을 으로 보내지 printf
만 cd
처음에는 아무 것도 인쇄하지 않으며, printf
입력은 어쨌든 읽혀지지 않습니다.
아마도 당신은 다음을 의미할 것입니다:
cd /some/dir && printf '%s\n' some-glob
즉, 쉘의 작업 디렉토리를 변경한 다음 cd
성공하면 glob의 확장을 인쇄합니다.
또는 ( cd
별도의 프로세스에서 수행되고 printf
현재 디렉터리를 변경한 후 동일한 프로세스에서 호출되는 경우):
(cd /some/dir && printf '%s\n' some-glob)
( (...)
서브쉘 환경은 일반적으로 서브쉘 프로세스를 포크하여 시작되며, 환경에 대한 변경 사항은 cd
내부 변경 범위로 제한됩니다 (...)
.)
또는소켓 쌍껍질이 좀 있어요
² 표준 출력에서 무언가를 인쇄할 수 있는 유일한 경우는 설정할 때(또는 / 일부 쉘을 사용하여) 또는 슬래시 없이 -
인수로 전달할 때입니다.-<n>
+<n>
$CDPATH
답변2
"홈 위치"에 파일 내용을 표시하지 않았지만 패턴과 일치하는 파일이 포함되어 있지 않은 것 같습니다.
XYZ.ABC.V.날짜 시간. 일괄
그러나 이 경우 *
쉘은 글로브를 확장하지 않고 대신문자 그대로당신의 명령을 따르십시오 printf
. 이것이 바로 설명하는 출력 문자열을 얻는 이유입니다.
이를 피하고 싶다면 설정을 시도해 보세요.
shopt -s nullglob
그런 다음 a를 포함하는 표현식이 일치하는 항목이 없으면 리터럴을 *
포함하는 대신 빈 문자열로 확장됩니다 .*
cd
그러나 동작을 통해 명령이 아무런 효과도 없는 방식으로 사용되는 것을 확인했습니다 . 더 자세히 설명하고 싶을 수도 있습니다.무엇명령을 사용하여 수행하려고 하면 기여자가 더 나은 솔루션을 찾는 데 도움을 줄 수 있습니다( |
예를 들어 를 사용하는 이유에 대한 질문은 이미논평).