Вы повторно реализуете подстановку истории.
$ mv /server/today/logfile1 /nfs/logs/ && gzip /nfs/logs/logfile1
$ !!:gs/logfile1/logfile2
Если вы еще не выполнили первую команду и просто хотите выполнить набор аналогичных команд, рассмотрите цикл:
for f in logfile logfile2; do
mv /server/today/"$f" /nfs/logs && gzip /nfs/logs/"$f"
done
Ваш язык программирования просто не поддерживает такие вещи.
Это сложно сделать в Linux из-за архитектуры Linux. Библиотеки C (, например. GNU и musl )скрывают эту сложность. Это по-прежнему одна из известных проблем с потоками в Linux.
Язык Go не повторяет механизм библиотек C. Текущая реализация этих функций не является системным вызовом и не является с 2014 года .
Вы можете проверить с помощью libcap , у него есть официальная библиотека go с примерами . В примере используется psx.Syscall3(syscall.SYS_SETUID,...)
для установки uid (как @JdeBP сказал, что go удаляет реализацию дляsyscall.Setuid()
). Библиотека psx является частью libcap.
Package psx provides a CGo backed API for invoking system calls in a way that each system call is mirrored on all pthreads of the combined Go/CGo runtime. Since the Go runtime treats all pthreads as interchangeable, a feature like this is needed to meaningfully change process privilege (including dropping privilege) in a Go program running on Linux