Может ли скрипт оболочки быть глобальной командой?

Ошибка вызвана тем, что вы используете '' ' для цитирования своей команды. Поскольку вы также используете 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'
0
20.11.2018, 12:51
2 ответа

Не уверен, какую версию 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, его открытие во время работы скрипта позволит вам увидеть полный путь в столбце команды

0
28.01.2020, 02:41

Да, это может быть глобальная команда.

Нет никакой разницы :исполняемый файл есть исполняемый файл. Неважно, на каком языке написан исполняемый файл (, некоторые языки могут делать некоторые вещи, которые другие не могут, но они все равно остаются исполняемыми ). В исполняемом файле Unix не должно быть расширения файла :, .shв конце — это просто часть файла, ничего особенного. Однако его наличие сообщает вызывающему абоненту, на каком языке он был написан, и делает невозможным изменение языка без обновления всех вызывающих абонентов.

Скрипты и программы ищутся в переменной $PATH. введите echo $PATH, чтобы получить список того, где система ищет (sudo echo $PATH, где она ищет, когда вы root ). Это то же место, что и при поиске не -скриптов (, поскольку все они являются исполняемыми ).

Запуск локальных программ (в том же каталоге)

Чтобы запустить что-то, что находится в том же каталоге, вам нужно выполнить ./«script-name», если только кто-то не добавил .к PATH.

3
28.01.2020, 02:41

Теги

Похожие вопросы