usrmodx() { sudo usermod "$1" -l "$2" -md "$2"; }
usrmodx durrantm_test durrantm_test2
Но не был должен это быть,
sudo usermod -l new_name -md new_dir old_name
так
sudo usermod -l durrantm_test2 -md durrantm_test2 durrantm_test
и как функция,
moveuser() { sudo usermod -l "$2" -md "$2" "$1"; }
moveuser durrantm_test durrantm_test2
или я пропускаю что-то?
Это предполагает использование оболочки, которая поддерживает функции (например, удар) и избегает псевдонимов, потому что Вы не можете использовать позиционные переменные.
Вы пытаетесь считать каждую строку как символ?
Имейте эти 25 записей быть в файле под названием stocks.txt. Затем используйте следующий сценарий, чтобы выполнить итерации по каждой строке в файле запасов и обработать символ с помощью функции запаса, объявленной в том же сценарии:
while read symbol ; do
stock $symbol >> /home/user/Desktop/stockquote.txt
done < stocks.txt
По-видимому, заголовок и тело вопроса не казались вполне тем же мне. Вот два решения:
Импорт данных из внешнего файла в сценарий Bash:
Считайте файл и сохраните его содержание как записи в массиве. (Отметьте: это выполнимо, учитывая содержание Вашего текстового файла. Если бы, для, например, какая-либо строка в файле имела несколько слов без цитат, то массив так сформированный не был бы так желаем.)
declare -a symbols=($(cat input_file.txt | tr '\n' ' '))
Теперь, выполните итерации по объектам массива symbols
следующим образом.
LOG_FILE=/home/user/Desktop/stockquote.txt
for symbol in ${symbols[@]}
do
# echo "Processing $symbol ..."
sh stock "$symbol" >> "$LOG_FILE"
done
На самом деле можно встроить это в сценарий, названный самим запасом. Просто изменитесь sh stock "$symbol"
выше к чему-то вроде этого:
f_process "$symbol" >> "$LOG_FILE"
где f_process
возможно функция, обрабатывающая символ. Если Вы не хотите писать функцию, просто поместите соответствующие строки кода там.
Передающие данные из внешнего файла как аргументы сценарию оболочки:
Связанное решение было уже отправлено neowulf33. Просто воспроизвожу это с исправлениями:
LOG_FILE=/home/user/Desktop/stockquote.txt
while read symbol
do
stock "$symbol" >> "$LOG_FILE"
done < input_file.txt
FILENAME=/home/barun/Desktop/file5.txt
2) /bin/bash stock $LINE > /home/barun/Desktop/$Line.txt
– Barun
31.08.2013, 09:16
Если Вы хотите циклично выполниться по строкам файла, можно использовать read
встроенный в цикле как это:
while IFS= read -r line; do
echo "$line"
done <input_file.txt
Содержание строки хранится в переменной line
(можно выбрать любое другое имя). Посмотрите Понимание IFS для большего количества объяснений. Без IFS=
, продвижение или запаздывающий пробел разделяются, который может быть желательным в Вашем случае.
Остерегайтесь этого >stockquote.txt
усекает выходной файл каждый раз. Или помещенный это вокруг целой команды или использование >>stockquote.txt
который добавляет в файл. Если Вы используете >>
, заботьтесь, что файл не может быть пустым, когда Ваш сценарий запускается.
Этот отрывок запускает программу stock
для каждой строки и хранилищ вывод в stockquote.txt
с пустой строкой (echo
без аргумента) между каждым символом.
while read -r line; do
stock "$line"
echo
done <input_file.txt >stockquote.txt
Удостоверьтесь это stock
исполняемый файл. Если это - сценарий оболочки, удостоверьтесь, что это начинается #!/bin/sh
. Если это не находится в пути поиска команды $PATH
, укажите путь явно (например. ./stock
если это находится в текущем каталоге).
Можно также использовать xargs
, но остерегайтесь, тот его входной синтаксис является странным: это не использует новые строки в качестве разделителей, но пробел и обработки \'"
как заключение в кавычки символов (с входным синтаксисом по умолчанию — просто ко всем неприятностям, xargs имеет альтернативные входные синтаксисы в зависимости от своих параметров командной строки). Для Вашего варианта использования это, вероятно, подходит также, и это короче, но Вы теряете возможность иметь пробельные символы или символы кавычки в символах, пропустить строки комментария, и т.д.
xargs -n 1 stock <input_file.txt >stockquote.txt
>>
или переместите stdout перенаправление за пределами цикла (я пошел бы для опции 2). И($symbol)
вызовет ошибку удара; я думаю, что Вы хотите избавиться от круглых скобок. – rici 25.08.2013, 08:19