Это должно работать и в ударе и в тире:
if [ ! -e targetfile ] || [ targetfile -nt sourcefile ]
then
echo "Already up to date"
exit 0
fi
Однако кажется на желание чего-то, любят, делают.
В bash
Вы могли даже записатьmake -f- <<<'targetfile: sourcefile ;' && exit 0
,
но <<<
синтаксис является конкретным ударом, следовательно Вам нужноecho "targetfile: sourcefile ;" | make -f- && exit 0
или просто реальный Make-файл.:)
Причина в том, что доступ к вашим SSH-ключам осуществляется через именной разъем. Этот именованный сокет находится в каталоге, принадлежащем вам, и не может быть доступен никому другому. Единственный способ дать доступ другому пользователю - это изменение прав на сокет.[1176610]. Вышеуказанные действия выполняются через расширенные атрибуты файловой системы. Если ваша файловая система [1176611]/tmp[1176612] не поддерживает ACL, то единственный способ сделать это - это [1176613]chmod o+rwx[1176614], и это ужасно небезопасно.
Лучшим решением является исправление того, что мешает вам выполнять эту команду от имени вашего собственного пользователя.[1176176].
Я не думаю, что без привилегий root можно обойти эту ограниченную оболочку (и не следует ее использовать).
Из [1176619]man su[1176620]:
Если у целевого пользователя ограниченная оболочка (т.е. поле оболочки этого пользователя в /etc/passwd не указано в /etc/shells), то опция --shell или переменная окружения $SHELL не будут учитываться, если только su не вызывается root.