cshell无法检查远程计算机上是否存在目录

时间:2016-04-26 16:38:36

标签: unix ssh rsync csh

我有这个简单的csh脚本来rsync东西:

#!/bin/csh

set SOURCE_FOLDER = $1
set DESTINATION_SERVER_NAME = $2
set DESTINATION_FOLDER = $3

echo Copying ${SOURCE_FOLDER} to ${DESTINATION_SERVER_NAME}:${DESTINATION_FOLDER}

if (ssh $DESTINATION_SERVER_NAME '[ -d $DESTINATION_FOLDER') then
    rsync -vlptr ${SOURCE_FOLDER}  ${DESTINATION_SERVER_NAME}:${DESTINATION_FOLDER}
    set RSYNCSTATUS = $status
    if ($RSYNCSTATUS == 0) then
        echo "COPY : Done"
    else
        exit $RSYNCSTATUS
    endif
else
    echo " ${DESTINATION_SERVER_NAME}:${DESTINATION_FOLDER} does not exist " 
    exit 1
endif

我以超级用户身份运行它,所以我可以在没有密码或用户名的情况下自由地运行。我想处理rsync的所有错误情况,即Source不退出,目标不存在。

使用$ status和inner if条件来处理不存在的来源。 但是,对于不存在的目标,rsync会创建目标文件夹(如果它不存在)。因此我被迫明确地处理它。我知道-e / folder或-d /文件夹检查文件夹是否存在,但我如何跨机器进行?

这个问题How to check if dir exist over ssh and return results to host machine

在我尝试时处理它。但是当我运行上面的脚本时:我得到if:表达式语法

以上是bash,所以不确定csh是否不支持该答案。所以,我尝试使用命令模式:

if (`ssh $DESTINATION_SERVER_NAME '[ -d "$DESTINATION_FOLDER" ]'`) then

if (`ssh $DESTINATION_SERVER_NAME '[ -d '$DESTINATION_FOLDER' ]'`) then

第一个给我$ DESTINATION_FOLDER未定义变量。第二个给我一个错误的输出,即如果条件失败,即使存在路径。

我该如何使这项工作?我觉得我在某个地方很近。或者还有其他更简单的替代方案吗?我的手在这里使用csh(遗留代码,老板),这是一个缓慢的挣扎过程。任何输入都会很棒。

1 个答案:

答案 0 :(得分:0)

您需要谨慎对待变量和引号。第一个示例将在服务器上进行评估,您没有这样的变量,第二个例子是完全错误的,因为您将单引号转换为另一个。你可以尝试这个:

if (`ssh $DESTINATION_SERVER_NAME "[ -d \\\"$DESTINATION_FOLDER\\\" ]"`) then

它应该做你需要的。