одна вещь, которая всегда сводила меня с ума, - это необходимость делать
mv file1 tmp
mv file2 file1
mv tmp file2
в oder для замены двух имен файлов.
, что вы, ребята, используете для обмена двумя файлами? Есть ли стандартный скрипт для обмена? что-то вроде sw file1 file2
было бы неплохо
Предложение заключается в том, чтобы добавить к bash функцию, которая будет заменять два файла:
nano .bashrc
вставить в нижней части файла:
function swap()
{
if [ $# -ne 2 ]; then
echo "Usage: swap file1 file2"
else
local TMPFILE=$(mktemp)
mv "$1" $TMPFILE
mv "$2" "$1"
mv $TMPFILE "$2"
fi
}
либо logout / login или run:
source .bashrc
Для замены двух файлов:
swap x y
где x и y - ваши имена файлов
source [ ! d5]
Я бы посоветовал использовать скрипт bash вместо того, чтобы играть с bash.conf.
Если вы попадаете в системы Unix, в какой-то момент вам нужно будет изучить сценарии оболочки.
Этот скрипт делает 2 вещи:
проверяет, не ошибался ли вы неправильное количество аргументов, проверяет, являются ли оба аргумента файлами (не ошибайтесь и не используйте каталог или что-то еще).Если он не прошел какие-либо из этих двух проверок, он расскажет вам, как запустить скрипт, иначе вы будете заменены ваши файлы.
#! /bin/sh
if [ ! $# = 2 -o ! -f $1 -o ! -f $2 ]
then
echo "Usage: `basename $0` file1 file2."
exit
fi
mv $1 cop_$1
mv $2 $1
mv cop_$1 $2
Сохраните его в своем доме, используйте chmod +x <scriptname>.sh, чтобы сделать его исполняемым, переместите его в /usr/bin/ с помощью команды sudo cp <scriptname>.sh /usr/bin/.
Теперь вы можете использовать <nameofthescrip> file1 file2 для обмена файлами.
Я согласен с Bruno, сценарий оболочки больше подходит для добавления функций типа команды. Я предлагаю дополнительные предложения:
1- для использования, не включайте период в конце сообщения. Вы пытаетесь показать синтаксис и сообщение «Использование: swap file1 file2». возможно, вводит в заблуждение, это не предложение и должно просто сказать: «Использование: swap file1 file2»
2- Размещение файла в / use / bin делает его системной. Хотя ваша личная установка Ubuntu может выдержать это, когда вы решили переустановить с нуля, вы запишете свой домашний каталог, а не / usr / bin. Я предлагаю вам создать $ HOME / bin, добавить это к вашему пути поиска и поместить все ваши скрипты в этот каталог.
3- Если вы поместите функцию в bashrc, то она доступна только в оболочке bash, если вы хотите, чтобы swap был доступен независимо от оболочки, тогда скрипт оболочки в каталоге bin более универсален и стандартный.
4- В сценарии я предлагаю, чтобы выход после выхода Usage был изменен на «exit 1», а после последней строки (третья команда mv) добавить « выход 0 ". Код выхода указывает на успех или неудачу. Если вы когда-либо пишете другие скрипты, которые используют swap, они могут проверить код выхода, чтобы увидеть, был ли успех или неудача.
5- Вместо cop_ $ 1, который предполагает, что файл cop_ не существует, я предлагаю mktemp, используя параметр --tmpdir, он создает временный файл в текущем каталоге. Это гарантирует отсутствие конфликтующих имен файлов.
Объединяя все это, я предлагаю следующее:
#!/bin/sh
if [ ! $# = 2 ] ; then
echo "Usage: `basename $0` file1 file2"
echo "Two file names are required."
exit 1
fi
if [ ! -f $1 -o ! -f $2 ] ; then
echo "Usage: `basename $0` file1 file2"
echo "Only file names are allowed."
exit 1
fi
TEMP=`mktemp --tmpdir=.`
mv $1 ${TEMP}
mv $2 $1
mv ${TEMP} $2
exit 0
Теперь поместите это в каталог bin в вашем домашнем каталоге. Убедитесь, что ваша переменная PATH принимает этот домашний каталог echo $PATH. Если это не так, PATH устанавливается в ресурсы инициализации оболочки (.bashrc или .cshrc или ???).
cd
mkdir bin
nano swap
< now paste the above script into the file, save, and exit>
chmod 755 swap
nano $HOME/.bashrc
< now add the following 2 lines at the end of the file, save, and exit>
# user specific pathing
PATH="$HOME/bin:$PATH"
Теперь вы либо запускаете новую оболочку bash, либо перерабатываете .bashrc file:
source .bashrc
Новый логин или оболочки должны быть автоматическими.
Thats it. Протестируйте только командой свопа, и вы увидите текст использования.