Невозможно создать файл удаленно через SSH, используя cat и < - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь создать файл удаленно через ssh с помощью команды следующим образом:

ssh $REMOTE_USER@$REMOTE_HOST "
    cat > hooks/post-receive <<EOF
    #!/bin/bash
    git checkout -f
    EOF
    chmod +x hooks/post-receive
"

После успешного выполнения, когда я проверяю файл с помощью cat repo.git/hooks/post-receive на удаленном сервере, я вижу следующий результат:

#!/bin/bash
git checkout -f
EOF
chmod +x hooks/post-receive

Я ожидаю, что EOF и chmod +x hooks/post-receive не будет присутствовать в файле post-receive.Что можно сделать, чтобы решить это.

1 Ответ

0 голосов
/ 25 декабря 2018

С man bash:

Здесь документы

Этот тип перенаправления инструктирует оболочку для чтения ввода из текущего источника до* строка, содержащая только разделитель (без завершающих пробелов) .

...

Если оператор перенаправления равен << -, то все начальные символы табуляции удаляются из строк вводаи строка, содержащая разделитель.Это позволяет вставлять здесь документы внутри сценариев оболочки естественным образом. </p>

Таким образом, вам необходимо удалить завершающие пробелы из документа здесь или заменить их на вкладки.

ssh $REMOTE_USER@$REMOTE_HOST "
cat > hooks/post-receive <<EOF
#!/bin/bash
git checkout -f
EOF
chmod +x hooks/post-receive"

# or,

ssh $REMOTE_USER@$REMOTE_HOST "
cat > hooks/post-receive <<-EOF
    #!/bin/bash
    git checkout -f
    EOF
    chmod +x hooks/post-receive"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...