2016-10-22 1 views
0

Я пытаюсь написать сценарий для перезапуска моего сервера в команде, используя шаг построения типа SSH EXEC.Вложенная команда bash не работает в teamcity ssh exec

Одна из вещей, которые должен выполнить сценарий, - это распаковать zip-файл, который я загружаю на предыдущем шаге, но версия в имени файла всегда будет меняться, поэтому я пытаюсь найти имя zip с помощью вложенного команда.

unzip `ls | grep zip` 

Это работает для меня, когда я SSH к серверу и сделать это в терминале, но она не работает, когда TeamCity пытается это сделать. Я получаю следующее сообщение в журнале построения

[19:36:55][Step 3/3] UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP. 
[19:36:55][Step 3/3] 
[19:36:55][Step 3/3] Usage: unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir] 
[19:36:55][Step 3/3] Default action is to extract files in list, except those in xlist, to exdir; 
[19:36:55][Step 3/3] file[.zip] may be a wildcard. -Z => ZipInfo mode ("unzip -Z" for usage). 
[19:36:55][Step 3/3] 
[19:36:55][Step 3/3] -p extract files to pipe, no messages  -l list files (short format) 
[19:36:55][Step 3/3] -f freshen existing files, create none -t test compressed archive data 
[19:36:55][Step 3/3] -u update files, create if necessary  -z display archive comment only 
[19:36:55][Step 3/3] -v list verbosely/show version info  -T timestamp archive to latest 
[19:36:55][Step 3/3] -x exclude files that follow (in xlist) -d extract files into exdir 
[19:36:55][Step 3/3] modifiers: 
[19:36:55][Step 3/3] -n never overwrite existing files   -q quiet mode (-qq => quieter) 
[19:36:55][Step 3/3] -o overwrite files WITHOUT prompting  -a auto-convert any text files 
[19:36:55][Step 3/3] -j junk paths (do not make directories) -aa treat ALL files as text 
[19:36:55][Step 3/3] -U use escapes for all non-ASCII Unicode -UU ignore any Unicode fields 
[19:36:55][Step 3/3] -C match filenames case-insensitively  -L make (some) names lowercase 
[19:36:55][Step 3/3] -X restore UID/GID info     -V retain VMS version numbers 
[19:36:55][Step 3/3] -K keep setuid/setgid/tacky permissions -M pipe through "more" pager 
[19:36:55][Step 3/3] -O CHARSET specify a character encoding for DOS, Windows and OS/2 archives 
[19:36:55][Step 3/3] -I CHARSET specify a character encoding for UNIX and other archives 
[19:36:55][Step 3/3] 
[19:36:55][Step 3/3] See "unzip -hh" or unzip.txt for more help. Examples: 
[19:36:55][Step 3/3] unzip data1 -x joe => extract all files except joe from zipfile data1.zip 
[19:36:55][Step 3/3] unzip -p foo | more => send contents of foo.zip via pipe into program more 
[19:36:55][Step 3/3] unzip -fo foo ReadMe => quietly replace existing ReadMe if archive file newer 
[19:36:56][Step 3/3] SSH exit-code [0] 
+3

Почему бы не просто «распаковать» .zip'? – Barmar

+0

Я также использую этот вложенный командный стиль для выполнения других команд. Поэтому мне все равно хотелось бы знать, почему вложенные команды не работают. Спасибо, хотя за информацию! Я не знал, что unzip может занять регулярное выражение. –

+0

Подстановочные знаки расширяются оболочкой, они работают для каждой команды автоматически. – Barmar

ответ

3

Это то, что разрывает выходные данные, когда нет аргументов. Я предполагаю, что ls | grep zip возвращает пустую строку, потому что ls ничего не нашел.

Я думаю, что это артефакт о том, как локальная оболочка обрабатывает ввод строки в ssh. Когда вы делаете

ssh $host "unzip `ls | grep zip`" 

из локальной оболочки Баша, Баш видит, что есть встроенная подоболочка и первый выполняет ls | grep zip локально, и встраивает результат в строку, и передает полученную строку в SSH. Так как (предположительно) нет почтового файла в текущем каталоге, в котором выполняется эта команда SSH, фактическая команда передается удаленной оболочке становится

ssh $host "unzip " 

То, как исправить это, чтобы избежать обратных кавычек, чтобы они не являются интерпретируется bash, но внедряется и пересылается в удаленную оболочку:

ssh $host "unzip \`ls | grep zip\`" 
+1

Или 'ssh $ host 'unzip $ (ls | grep zip)''. Одиночные кавычки не позволяют интерпретировать что-либо –

 Смежные вопросы

  • Нет связанных вопросов^_^