Как передать команды внешней команде из bash?

Nautilus использует gvfsдля подключения удаленных хранилищ, таких как SFTP-сервер в вашем вопросе. Это позволяет вам обращаться с удаленным сервером так, как если бы он был частью вашей локальной файловой системы. Путь, по которому он монтируется, обычно

/run/user/<your uid>/gvfs/<server specification>/<path>

Я совершенно уверен, что префикс всегда

/run/user/<your uid>

, так что вы можете найти эту точку монтирования с помощью lsили вкладки-в этом каталоге.

Как только вы нашли эту точку монтирования, вы можете использовать teeкак обычно (с добавлением разрывов строки -для ясности):

tar --exclude='./somefolder' -zc.  \
| tee "/run/user/1000/gvfs/sftp:host=mydomain.ending/storage/location/on/server/sth.tar"  \
| sha256sum

В качестве альтернативы вы можете избежать монтирования GVFS и по-прежнему избежать замены переносимого процесса -, используя SSH вместо SFTP:

tar --exclude='./somefolder' -zc.  \
| ssh mydomain.ending 'tee "/storage/location/on/server/sth.tar"' 2>/dev/null  \
| sha256sum

К сожалению, sftpпрограмма не позволяет отправлять файлы на удаленный хост с помощью одной командной строки, а только извлекать их.

Как указывает @rudimeier, описанный выше метод sshзагружает и загружает файл, чтобы избежать его локального хранения.Если вы не хотите -повторно загружать его, может быть лучше сделать это sha256sumудаленно:

tar --exclude='./somefolder' -zc.  \
| ssh mydomain.ending 'tee "/storage/location/on/server/sth.tar" | sha256sum' 2>/dev/null
1
23.09.2019, 21:42
1 ответ

Ты был близок:

printf 'print("hello world")\n exit\n' | ipython

И вам даже не нужно exit, так как ipythonавтоматически завершает работу после чтения команд из стандартного ввода, так что вы могли бы сделать:

echo 'print("hello world")' | ipython
1
27.01.2020, 23:40

Теги

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