Ошибка вызвана тем, что вы используете '' '
для цитирования своей команды. Поскольку вы также используете single '
для цитирования ваших команд awk
и sed
, оболочка думает, что команда завершена, и путается.Насколько мне известно, не существует такой вещи, как '' '
; первые два '
игнорируются, поскольку они просто определяют пустую строку, а последняя берется как открывающая цитата, которая закрывается начальной цитатой вашего awk
. Вы можете убедиться в этом, если посмотрите, как ваш код выделен в вашем вопросе.
Простейшее решение - заключить команду в одинарные кавычки, а для sed
и awk
- в двойные кавычки. Однако затем вам нужно будет экранировать $ 1
в сценарии awk
, чтобы он не интерпретировался как переменная оболочки. Вы также усложняете вещи без причины. Все, что вам действительно нужно, это:
ssh localhost 'cut -d: -f1 /etc/passwd |
while read i; do last -n 1 $i | sed -e "/^$/{N;d;}"; done'
Не уверен, какую версию Gnu/linux вы используете, но вот несколько общих удобных помощников.
echo $PATH
-даст вам все пути, которые просматриваются для скриптов и двоичных файлов. имейте в виду, что запуск чего-либо под sudo выполняется другим человеком, поэтому «sudo echo $PATH
» может иметь разные результаты.
В некоторых ОС root имеет доступ к командам, которых нет у пользователей.
whereis veracrypt-unistall.sh
и sudo whereis veracrypt-unistall.sh
могут показать вам путь, если он известен, также в некоторых системах есть команда which.
which veracrypt-unistall.sh
если у вас установлен top или htop, его открытие во время работы скрипта позволит вам увидеть полный путь в столбце команды
Нет никакой разницы :исполняемый файл есть исполняемый файл. Неважно, на каком языке написан исполняемый файл (, некоторые языки могут делать некоторые вещи, которые другие не могут, но они все равно остаются исполняемыми ). В исполняемом файле Unix не должно быть расширения файла :, .sh
в конце — это просто часть файла, ничего особенного. Однако его наличие сообщает вызывающему абоненту, на каком языке он был написан, и делает невозможным изменение языка без обновления всех вызывающих абонентов.
Скрипты и программы ищутся в переменной $PATH
. введите echo $PATH
, чтобы получить список того, где система ищет (sudo echo $PATH
, где она ищет, когда вы root ). Это то же место, что и при поиске не -скриптов (, поскольку все они являются исполняемыми ).
Чтобы запустить что-то, что находится в том же каталоге, вам нужно выполнить ./«script-name»
, если только кто-то не добавил .
к PATH
.