Найдено результатов: 23

Shell странности перенаправления ввода сценариев

Может ли кто-нибудь объяснить такое поведение? Бегущий:

#!/bin/sh
echo "hello world" | read var1 var2
echo $var1
echo $var2

результаты в ничего не выход, а:

#!/bin/sh
echo "hello world" > test.file
read var1 var2 < test.file
echo $var1
echo $var2

производит ожидаемый результат:

hello
world

Не должен ли канал сделать за один шаг то, что перенаправление на test.file сделало во втором примере? Я попробовал один и тот же код с оболочками dash и bash и получил одинаковое поведение от обоих из них.

linux   bash   shell   ksh   dash-shell    

482   9   16:03, 1st July, 2020


Как мне создать ASCII коды 2 и 3 в командной строке Bash?

Если я нажму Ctrl + B , это должно дать мне ASCII код 2, но Ctrl + C будет интерпретироваться как перерыв.

Поэтому я решил, что мне нужно перенаправить файл. Как я могу получить эти символы в файл?

linux   bash   unix   ascii    

419   3   21:36, 11th August, 2020


Почему я не должен "bet the future of the company" на shell скриптах?

Я смотрел на http://tldp.org/LDP/abs/html/why-shell.html и был поражен:

Когда не использовать скрипты shell ...

  • Критически важные приложения, на которые вы ставите будущее компании

Почему бы и нет?

bash   shell   ksh    

462   9   03:33, 19th August, 2020


Как создать дамп ядра в Linux при ошибке сегментации?

У меня есть процесс в Linux, который получает ошибку сегментации. Как я могу сказать ему, чтобы он генерировал дамп ядра, когда он выходит из строя?

linux   bash   unix   coredump   tcsh    

495   12   01:32, 13th August, 2020


Как я могу конвертировать Markdown документов в HTML в массовом порядке?

Я пишу некоторую документацию в Markdown и создаю отдельный файл для каждого раздела документа. Я хотел бы иметь возможность конвертировать все файлы в HTML за один раз, но я не могу найти никого, кто пробовал бы то же самое. Я работаю на Mac, поэтому я думаю, что простой сценарий bash должен быть в состоянии справиться с этим, но я никогда ничего не делал в bash и не имел никакой удачи. Кажется, что это должно быть просто написать что-то, чтобы я мог просто бежать:

markdown-batch ./*.markdown

Есть какие-нибудь идеи?

bash   markdown    

466   4   10:19, 6th August, 2020


Почему **find** ничего не находит?

Я ищу файлы скриптов shell, установленные в моей системе, но найти не работает:

$ find /usr -name *.sh

Но я знаю, что есть тонна сценариев там. Например:

$ ls /usr/local/lib/*.sh
/usr/local/lib/tclConfig.sh  
/usr/local/lib/tkConfig.sh

Почему не находит работу?

bash   unix   shell   ksh    

382   3   03:36, 14th August, 2020


Bash Обработка Труб

Кто-нибудь знает, как bash обрабатывает отправку данных по каналам?

cat file.txt | tail -20

Выводит ли эта команда все содержимое file.txt в буфер, который затем считывается tail? Или эта команда, скажем, выводит содержимое file.txt строка за строкой, а затем делает паузу в каждой строке для обработки хвоста, а затем запрашивает дополнительные данные?

Причина, по которой я спрашиваю, заключается в том, что я пишу программу на встроенном устройстве, которое в основном выполняет последовательность операций с некоторым куском данных, где выход одной операции отсылается в качестве входа следующей операции. Я хотел бы знать, как linux (bash) справляется с этим, поэтому, пожалуйста, дайте мне общий ответ, а не конкретно, что происходит, когда я запускаю "cat file.txt | tail -20".

Заранее благодарим вас за ваши ответы!

EDIT: Shog9 указал на соответствующую статью Википедии, это не привело меня непосредственно к статье, но это помогло мне найти это: http://en.wikipedia.org/wiki/Pipeline_% 28Unix%29#реализация , которая действительно имела информацию, которую я искал.


Мне очень жаль, что я не совсем ясно выразился. Конечно, вы используете канал и, конечно же, используете stdin и stdout соответствующих частей команды. Я предполагал, что это было слишком очевидно, чтобы утверждать.

Я спрашиваю, как это handled/implemented., так как обе программы не могут работать одновременно, как данные передаются из stdin в stdout? Что произойдет, если первая программа генерирует данные значительно быстрее, чем вторая программа? Выполняет ли система просто первую команду до тех пор, пока она не завершится или не заполнится буфер stdout, а затем переходит к следующей программе и так далее в цикле, пока не останется больше данных для обработки, или есть более сложный механизм?

linux   bash   pipe   device    

445   3   22:04, 18th August, 2020


Как создать дамп ядра в Linux при ошибке сегментации?

У меня есть процесс в Linux, который получает ошибку сегментации. Как я могу сказать ему, чтобы он генерировал дамп ядра, когда он выходит из строя?

linux   bash   unix   coredump   tcsh    

483   12   16:53, 5th August, 2020


Удалите все файлы X в bash, кроме самых последних

Есть ли простой способ, в довольно стандартной среде UNIX с bash, запустить команду для удаления всех файлов X из каталога, кроме самых последних?

Чтобы привести более конкретный пример, представьте себе, что некое задание cron каждый час записывает файл (скажем, файл журнала или резервную копию tar-ed) в каталог. Мне бы хотелось, чтобы было запущено еще одно задание cron, которое удаляло бы самые старые файлы в этом каталоге, пока их не станет меньше, скажем, 5.

И просто для ясности, там есть только один файл, он никогда не должен быть удален.

bash   unix   scripting    

769   17   18:11, 2nd August, 2020


Bash один лайнер: копировать template_*.txt в foo_*.txt?

Скажем, у меня есть три файла (template_*.txt):

  • template_x.txt
  • template_y.txt
  • template_z.txt

Я хочу скопировать их в три новых файла (foo_*.txt).

  • foo_x.txt
  • foo_y.txt
  • foo_z.txt

Есть ли простой способ сделать это с помощью одной команды, например

cp --enableAwesomeness template_*.txt foo_*.txt

bash    

421   8   16:38, 26th August, 2020


Есть ли способ, чтобы предотвратить находку из раскопок рекурсивно в подкаталогах?

Когда я это сделаю:

$ find / 

Он обыскивает всю систему.
Как мне это предотвратить?

(Этот вопрос возникает из "ответа" на другой вопрос.)

bash   unix   shell   ksh    

353   5   09:58, 2nd August, 2020


RSync только если смонтирована файловая система

Я хочу настроить задание cron для rsync удаленной системы на резервный раздел, Что-то вроде:

bash -c 'rsync -avz --delete --exclude=proc --exclude=sys root@remote1:/ /mnt/remote1/'

Я хотел бы иметь возможность "set it and forget it", но что делать, если /mnt/remote1 будет размонтирован? (После перезагрузки или чего-то еще) я хотел бы ошибиться, если /mnt/remote1 не смонтирован, а не заполнять локальную файловую систему.

Редактировать:
Вот что я придумал для скрипта, очистку улучшений оценил (особенно для пустого тогда ... иначе я не мог бы оставить их пустыми или bash ошибки)

#!/bin/bash

DATA=data
ERROR="0"

if cut -d' ' -f2 /proc/mounts | grep -q "^/mnt/$1\$"; then
    ERROR=0
else
    if mount /dev/vg/$1 /mnt/$1; then
        ERROR=0
    else
        ERROR=$?
        echo "Can't backup $1, /mnt/$1 could not be mounted: $ERROR"
    fi
fi

if [ "$ERROR" = "0" ]; then
    if cut -d' ' -f2 /proc/mounts | grep -q "^/mnt/$1/$DATA\$"; then
        ERROR=0
    else
        if mount /dev/vg/$1$DATA /mnt/$1/data; then
            ERROR=0
        else
            ERROR=$?
            echo "Can't backup $1, /mnt/$1/data could not be mounted."
        fi
    fi
fi

if [ "$ERROR" = "0" ]; then
    rsync -aqz --delete --numeric-ids --exclude=proc --exclude=sys \
        root@$1.domain:/ /mnt/$1/
    RETVAL=$?
    echo "Backup of $1 completed, return value of rsync: $RETVAL"
fi

bash   backup   sysadmin   rsync    

405   5   23:59, 17th August, 2020


Bash Рег-эксп замена

Есть ли способ выполнить замену строки регулярного выражения на текущей строке в bash?

Я довольно часто оказываюсь в ситуации, когда я набрал длинную командную строку, а затем понимаю, что я хотел бы изменить слово где-то в строке.

Мой текущий подход заключается в том, чтобы закончить строку, нажать Ctrl + A (чтобы добраться до начала строки), вставить # (чтобы закомментировать строку), нажать enter, а затем использовать синтаксис ^oldword^newword ( ^oldword^newword выполняет предыдущую команду после замены старого слова новым словом).

Но должен быть лучший (более быстрый) способ достичь этого. (Мышь не представляется возможным, так как я нахожусь в ssh-сеансах большую часть времени).

Вероятно, для этого есть какая-то ключевая команда emacs, о которой я не знаю.

Edit: я пробовал использовать vi-mode. Случилось что-то странное. Хотя я и являюсь любящим пользователем vim, у меня были серьезные проблемы с использованием моего любимого bash. Все эти движения пальцев, которые были выжжены в моем подсознании, внезапно перестали работать. Я быстро вернулся к emacs-режиму и подумал, давая emacs попробовать в качестве моего любимого редактора (хотя я думаю, что то же самое может произойти снова).

regex   bash    

448   3   21:29, 5th August, 2020


Почему **sort** не сортирует то же самое на каждой машине?

Использование одной и той же команды сортировки с одинаковыми входными данными приводит к различным результатам на разных машинах. Как мне это исправить?

bash   unix   sorting   ksh    

431   4   08:45, 2nd August, 2020


Как вы используете ssh в скрипте shell?

Когда я пытаюсь использовать команду ssh в сценарии shell, команда просто сидит там. У вас есть пример того, как использовать ssh в скрипте shell?

bash   shell   ssh   ksh   rsh    

399   5   02:34, 29th August, 2020


Получение ssh для выполнения команды в фоновом режиме на целевой машине

Это следующий вопрос к тому, как вы используете ssh в скрипте shell? вопрос. Если я хочу выполнить команду на удаленной машине, которая выполняется в фоновом режиме на этой машине, как я могу получить команду ssh для возврата? Когда я пытаюсь просто включить амперсанд (&) в конце команды, он просто зависает. Точная форма команды выглядит так:

ssh user@target "cd /some/directory; program-to-execute &"

Есть какие-нибудь идеи? Одна вещь, чтобы отметить, что логины на целевой машине всегда производят текстовый баннер, и у меня есть SSH ключей, настроенных так, что пароль не требуется.

bash   ssh   csh    

477   14   22:52, 9th August, 2020


Screen и history?

В своем ubuntu я постоянно использую терминальный мултиплексор Screen. Со своими функциями он справляется на отменно, но вот один прокол у него имеется — это история комманд. С ней происходит непонятное чёрт-те что что, но свои комманды я там найти не могу. Может ли кто-нибудь подсказать как сделать так чтобы история комманд работала как надо?

Linux   bash    

409   4   19:02, 10th August, 2020


Bash. Скрипт автоматического кодирования видео

Господа, требуется помощь в написании скрипта. В связи в началом нового сериального сезона в голову пришла мысль что хватит уже «руками» каждый файл кодировать, надо этот процесс как то автоматизировать. задача: есть папка с видео, из неё необходимо выбирать файлы, в названиях которых содержится — LostFilm.TV, и если при этом нет такого же файла с расширением mp4 (уже закодированный) — запихивать в скрипт и кодировать. Кодирую видео при помощи ffmpeg: ffmpeg -i House.M.D.s07e01.rus.LostFilm.TV.avi -acodec aac -strict experimental -ab 128kb -vcodec mpeg4 -b 1000kb -s 320x180 -r 23.98 House.M.D.s07e01.rus.LostFilm.TV.mp4

PowerShell   bash   FFmpeg    

313   3   19:33, 14th August, 2020


Проблема с bash-скриптом

Имеется bash-скрипт, который должен запускаться по крону. Процесс получает pid из файла (pid=`<pid/order_$name`). Крон как раз ругается на то, что не может получить pid. Из строки скрипт запускается и отрабатывает отлично.

Если же в скрипте '<' заменить на /bin/cat, то и кроном он начинает запускаться хорошо. В кронтабе SHELL=/bin/bash

Уже всю голову себе поломал. Нужна помощь. Заранее спасибо.

PowerShell   bash   Планировщики   задач    

269   3   03:05, 5th August, 2020


Запуск openofficeю.writer из коммандной строки в macos?

Недавно на mac, пытаюсь сделать такую вещь:


open -a /Applications/OpenOffice.app --args -writer


Но он открывает новый writer только если OpenOffice еще не был запущен, если был запущен раньше показывает последнее активное окно.

Как создать новый документ из консоли?

bash   macOS   OpenOffice    

333   2   23:32, 12th August, 2020


Shell, замена всех символов строки их кодами?

Привет!


Подскажите, кто знает, каким образом все символы строки заменить их кодами или каким нибудь hash, по средствам команд shell.

Вот пример:
На входе

> hello world

А на выходе, что-то на подобии

> h2dfde3r443332d



Пробовал под windows через perl
$ perl -e 'print crypt(«hello world», «a3»)'


Но выдал:
The crypt() function is unimplemented due to excessive paranoia. at -e line 1.


В линкусе все отрабатывает хорошо.


Вот и ищу, чтоб под windows можно было с минимальными затратами просто поставив msysGit можно было выполнить данную задачу.

upd: пришлось поставить ActivePerl.

заработало.

но решение задачи средствами sh буду ждать.

Perl   bash   Командная   строка   Хеширование    

432   2   18:33, 24th August, 2020


Как бороться с ошибкой: couldn't commit memory for cygwin heap?

Привет!


есть код:
<font color="black">awk <font color="#A31515">'<br/>
  BEGIN {<br/>
    split(&quot;\b\b\b\b\b. . . . . \b- \b\b- \b\b- \b\b- \b\b- \b= = = = =&quot;, st, &quot; &quot;)<br/>
    i=0<br/>
  }<br/>
  /^[0-9]/ { <br/>
    sub(/:.*/, &quot;&quot;);<br/>
    d=$0;<br/>
    next;<br/>
  }    <br/>
  /^&/ {<br/>
    sub(/&/, &quot;&quot;);<br/>
    f=$0<br/>
    substr($0, 2, length($0) - 1);<br/>
    next;<br/>
  }<br/>
  /^+/ { a=&quot;A&quot;; }<br/>
  /^-/ { a=&quot;D&quot;; }    <br/>
  /^[\+-]/ {       <br/>
    fflush(&quot;&quot;)<br/>
    sub(/[\+-]/, &quot;&quot;)                  <br/>
    &quot;echo \&quot;&quot; $0 &quot;\&quot; | md5sum | cut -f1 -d \&quot; \&quot; | sed -e \&quot;s@[32|16]@/sd@g\&quot;&quot; | getline str; close(&quot;&quot;)<br/>
    print &quot;&quot;<br/>
    system(&quot;echo -ne \&quot;&quot; st[i++] &quot;\&quot; &gt;&2&quot;)<br/>
    if (i &gt; 16) i=0<br/>
  }    <br/>
' $gitdiff | \<br/>
sed -e <font color="#A31515">'s/\(filename=&quot;[^&quot;]&quot;\)/\1/'</font>  <br/>
</font><br/>
<font color="gray">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><font color="gray">Source Code Highlighter</font></a>.</font></font>


есть файл из которого берутся данные


при выполнение вылетает ошибка


C:\Program Files\Git\bin\sh.exe: *** couldn't commit memory for cygwin heap, Win32 error 487

C:\Program Files\Git\bin\sh.exe: *** couldn't commit memory for cygwin heap, Win32 error 487

C:\Program Files\Git\bin\gawk.exe: *** couldn't commit memory for cygwin heap, Win32 error 487


помогите понять почему?

upd: может дело в длине данных?

PowerShell   bash   MSysGit   AWK    

381   1   13:37, 1st October, 2020


Linux: прицепить обратно консоль к процессу?

Дело было из под ssh в bash.


Запустил некую программу на несколько суток, которая изредка выводит в стандартный вывод сообщения. Потом сделал

Ctrl-Z

$ bg

$ logout


На следующий день опять залогинился и вижу программу в списке процессов. Все еще работает, зараза.


Можно ли прицепить обратно вывод программы в консоль/увидеть ее вывод?

Если да, то как?


PS/ я понимаю, что если бы заранее сделать что-то вроде «progname | tee ./log-file», то этого вопроса можно было бы избежать, но процесс прерывать нельзя.


UPD: после повторного логина в jobs не висит, к сожалению.

Linux   bash    

302   6   21:06, 1st October, 2020