Я пытаюсь подключиться к серверу и выполнить несколько команд на хосте.

Мне удалось сделать следующее, и это прекрасно работает

ssh -t -X thor 'cd /stmp/username; ls -rtl ; rm ~/tmp.file; tcsh -l'

В настоящее время я пытаюсь развернуть команду, чтобы изменить каталог на последнюю папку, указанную в /stmp /username /

Сначала я проверил команду, которую хотел использовать в терминале, и она работает. Он перейдет в последнюю папку в списке каталогов. Команда

cd `ls -rtl | cut -d' ' -f9 | tail -1`

Теперь я пытаюсь объединить вышеуказанную команду в команду ssh. Но это не работает.

ssh -t -X thor 'cd /stmp/username; cd `ls -rtl |cut -d' ' -f9 | tail -1` ; rm ~/tmp.file; tcsh -l'

Что-то не так с моей командой?

1 ответ1

2

Когда ваша команда работает из командной строки, например,

cd `ls -rtl | cut -d' ' -f9 | tail -1`

Проблем с цитированием нет. Однако, когда вы пытаетесь добавить это в свою команду ssh , вы заключаете команду ssh в одинарные кавычки , но вы также включили одинарные кавычки в свою команду, чтобы заключить ' ' (пробел) в команду cut - вызывая проблемы ,

Самое простое решение - оставить кавычки вокруг вашей команды ssh в одинарных кавычках и изменить кавычку вокруг space на двойные кавычки внутри нее, например:

ssh -t -X thor 'cd /stmp/username; cd `ls -rtl |cut -d" " -f9 | tail -1` ; rm ~/tmp.file; tcsh -l'

(в результате нет проблем с переменным или расширением пути)

Внесите изменения и дайте мне знать, если у вас есть дополнительные вопросы.

примечание: вы также должны избегать подстановки команд, используя обратные галочки в пользу $(...) - гораздо более удобочитаемый.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .