OK, так как по какой-то причине использование переменной для хранения местоположения не работает, я думаю, что лучшим методом будет использование find
, чтобы просто найти место, где существует Symantec, тогда вы сможете cat
его без проблем и передать весь путь эхом.
for i in `cat /app/scripts/symantec_scripts/list`
do ssh root@$i "uname -n
cat $(find / -maxdepth 2 -name Symantec)/virusdefs/definfo.dat
echo Location is $(find / -maxdepth 2 -name Symantec)/virusdefs/definfo.dat
echo ....................................................................."
done | tee /tmp/symantec_info.`date +"%m%d%y"`
По сути, $(command)
выполнит команду как в shell и заменит ее выводом, так $(find / -maxdepth 2 -name Symantec)
ищет, начиная с /
и спускаясь только на 2 директории вглубь, все, что называется Symantec, и выводит это. Этот вывод просто используется вместо всего оператора $(command).
Весь оператор $(find...)
в вашем случае должен выводить что-то вроде /app/Symantec
или /opt/Symantec
Это также имеет дополнительное преимущество, позволяя избежать длинного оператора if
и найти Symantec, если он находится где-либо еще.
Единственный недостаток - если по какой-то причине у вас есть более одного каталога с именем Symantec в непосредственном корневом каталоге и любом каталоге на уровень выше /
. Это приведет к проблемам.
El directorio actual, y todos sus directorios principales, deben ser accesibles para el usuario postgres
, es decir, tener el bit ejecutable/buscable configurado para cualquier propietario/grupo/otro permiso que se aplique en cada directorio al determinar los permisos de postgres
u otorgar ese permiso mediante ACL.
Para verificar los permisos, usenamei
:
namei -l /path/to/directory
Consulte ¿Cómo comprobar si un usuario puede acceder a un archivo determinado? para más detalles.
Puedes, el usuario postgres
no puede.
sudo -u postgres
cambia la identificación del usuario -a postgres y luego ejecuta los comandos. en este momento, el usuario postgres no puede acceder al archivo de entrada, ni siquiera al directorio actual.
En su lugar, hazlo de esta manera:
$ sudo -u postgres pg_restore -C -d dvdrental < dvdrental.tar
De esta manera, su shell abre el archivo en su cuenta antes de que sudo comience y pg_restore
luego accede al contenido del archivo en la entrada estándar