특정 폴더를 조사하여 해당 폴더에 파일이 있을 때 이메일을 보내는 스크립트를 작성해야 합니다.
비슷한 작업을 시도했지만 명령 변수 및 폴더 인쇄에 오류가 발생합니다.
for folder in "FOLDER1" "FOLDER2"; do
command=`ssh -q user@host "ls /usr/local/username/`{print $folder}` | wc -l"`
#echo $command
if [ $command -ne '0' ]
then
#send error email
fi
done
답변1
다음을 시도해 보세요.
command=$(ssh -q user@host 'ls "/usr/local/username/'$folder'" | wc -l')
실제로 역따옴표를 중첩할 수는 없습니다(그리고 왜 그렇게 하는지 모르겠습니다).
답변2
이것은 훨씬 간단할 수 있습니다. 무엇을 하려는지 모르겠습니다 {print $folder}
. 여기서 중괄호는 의미가 없습니다. $folder
문자열에 포함시키려는 경우 $folder
.출력을 구문 분석하면 안 됩니다.ls
, 거의 작동하지 않으며 종종 실패합니다.
if ! ssh user@host "test -e '/usr/local/username/$folder'"; then
# the file doesn't exist
원격 셸에서는 파일 이름을 따옴표로 묶어야 합니다. 저는 위 명령에서 원격 명령의 파일 이름을 작은 따옴표로 묶어서 이 문제를 대부분 해결했지만, 이는 $folder
작은 따옴표 자체가 포함되지 않은 경우에만 작동합니다. 로컬 셸이 bash, ksh93 또는 zsh인 경우 대신 작은따옴표와 함께 사용하세요.
q=\'\\\'\'
if ! ssh user@host "[ -d '/usr/local/username/${folder//\'/$q}' ]"; then
더 편리한 또 다른 방법은 다음을 사용하여 원격 파일 시스템을 마운트하는 것입니다.sshfs일반 파일 시스템 인터페이스를 통해 처리합니다. 동시에 많은 원격 서버를 사용하지 않는 한 이 방법을 권장합니다.
mkdir /path/to/mount/point
sshfs user@host /path/to/mount/point
if ! [ -d "/usr/local/username/$folder" ]; then