На случай, если вы не хотите связываться с вашим локальным файлом ~ / .ssh / config
и опция - no-motd
у вас тоже не работает, мне удалось установить переменную env RSYNC_RSH
.
RSYNC_RSH="ssh -q" rsync
Вы также можете попробовать использовать параметр rsync -e
rsync -e 'ssh -q'
El método más fácil para leer argumentos se puede describir de la siguiente manera;
Cada argumento es referenciado y analizado por $IFS
o internal file separator
actualmente definido. El carácter predeterminado es un espacio.
Por ejemplo, tome lo siguiente;#./script.sh arg1 arg2
La lista de argumentos en ese ejemplo es arg1 = $1
y arg2 = $2
, que se puede reescribir como arg1 arg2 = $@
.
Otra nota es el uso de una lista de registros, ¿con qué frecuencia cambia eso? Mi suposición es diaria. ¿Por qué no usar la salida del directorio como matriz de su ciclo iterativo? Por ejemplo;
for i in $(ls /path/to/logs); do
./workaround.sh $i;
done
O mejor aún, pase al uso de functions
en bash para eliminar el desorden.
function process_file()
{
# transfer file code/command
}
function iterate_dir()
{
local -a dir=($(ls $1))
for file in ${dir[@]}; do
process_file $file
done
}
iterate_dir /path/to/log/for
Si bien estas son meras sugerencias para mejorar su conocimiento de secuencias de comandos de shell, debo saber si hay un error que está recibiendo y también necesitaría conocer los detalles de cada código de secuencias de comandos y/o funcionalidad. Hacer uso del argumento -x
también ayuda a depurar secuencias de comandos.
Si simplemente está transfiriendo registros, es posible que desee eliminar todos los scripts y utilizar rsync
, rsyslog
o syslog
, ya que todos son mucho más adecuados para la tarea en cuestión.
dentro del script :necesita un bucle de lectura como while read ; do......... ; done < filename
para tratar las líneas como variable $REPLY...
por ejemplo
while read
do
mv $REPLY $REPLY.old
done < liste.txt
cambiará el nombre de cualquier archivo desde dentro de liste.txt a filename.old
ahora tiene la estructura que puede adaptar a sus necesidades dependiendo de lo que quiera decir con "en el nombre de cada archivo de registro en list.txt para ejecutar".:)
( Nota:Personalmente creo que el enfoque de Kusalananda es el mejor en este escenario específico, por lo que agregaré información explicativa y recomendaciones)
for
Usando ese enfoque usted:
El enfoque while
+ read
es preferible pero no es una solución a prueba de balas -:
while IFS= read -r line; do
# Your code here
done < file
Escriba "$i"
en lugar de $i
. Las variables sin comillas son probablemente la principal fuente de errores y agujeros de seguridad en los scripts de shell.
Preguntas relacionadas:
$(...)
en lugar de`...`
$(...)
es compatible con POSIX -y se puede anidar más fácilmente.
También puede modificar su secuencia de comandos para admitir múltiples argumentos e incluso una opción --batch
.
Si no sabe por dónde empezar, tengo un script de muestra/plantilla que admite esas características(usa sintaxis específica de Bash -, aunque ).
Ejemplo de uso:
$ cat list.txt
list_item_1
list_item_2
list_item_3
$ script --batch list.txt item_1 item_2
Operands:
1: [list_item_1]
2: [list_item_2]
3: [list_item_3]
4: [item_1]
5: [item_2]
Возможно, я неправильно прочитал этот вопрос, но то, как я его прочитал, заключалось в том, как заставить мой личный скрипт принимать несколько аргументов, например, так, как wget может выполнить «wget url1 url2 url3»
вставьте весь свой сценарий в следующее место, где написано «строки из моего сценария», и сохраните этот файл как новый сценарий.:
ARGUMENTS=$(echo "$@"| tr " " "\n") ; while read A; do "lines from my script";done < "$ARGUMENTS"
Обратите внимание, что если ваш сценарий ссылается на $1, вам придется изменить его на $A и, конечно же, проверить все другие ссылки.
аргументы хранятся в одной строке, разделенной в переменной с именем $@. этот хак использует tr для обмена пробелами с новой строкой и сохраняет это в новой переменной с именем ARGUMENTS. остальная часть скрипта запускает ваш скрипт для каждой строки этой переменной.
Я написал это, чтобы получить мой парсер bash, который принимает ОДИН и только один аргумент для приема нескольких URL-адресов, поэтому он может не работать со сценариями, которые обычно принимают более одного аргумента