# ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΊΠΎΠ½Π΅Ρ ΡΠ°ΠΉΠ»Π°.
# Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ
if get_confirm ; then
insert_title $cdcatnum, $cdtitle, $cdtype, $cdac
add_record_tracks
else
remove_records
fi
return
}
7. Π€ΡΠ½ΠΊΡΠΈΡ find_cd Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ grep ΠΈΡΠ΅Ρ ΡΠ΅ΠΊΡΡ Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ-Π΄ΠΈΡΠΊΠ° Π² ΡΠ°ΠΉΠ»Π΅ Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ. ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ Π·Π½Π°ΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Π±ΡΠ»Π° Π½Π°ΠΉΠ΄Π΅Π½Π° ΡΡΡΠΎΠΊΠ°, Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° grep ΡΠΎΠ»ΡΠΊΠΎ Π²Π΅ΡΠ½Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π΅ Π½Π° ΡΠΎ, ΡΡΠΎ ΡΡΡΠΎΠΊΠ° Π½Π΅ Π±ΡΠ»Π° Π½Π°ΠΉΠ΄Π΅Π½Π° ΠΈΠ»ΠΈ Π±ΡΠ»Π° Π½Π°ΠΉΠ΄Π΅Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ. ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠΎΡ ΡΠ°Π½ΠΈΡΠ΅ Π²ΡΠ²ΠΎΠ΄ Π² ΡΠ°ΠΉΠ», ΠΎΡΠ²ΠΎΠ΄ΡΡΠΈΠΉ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ΅ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅, Π° Π·Π°ΡΠ΅ΠΌ ΡΠΎΡΡΠΈΡΠ°ΠΉΡΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠΎΠΊ Π² ΡΠ°ΠΉΠ»Π΅.
Π£ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΡΠ»ΠΎΠ², wc, Π² Π²ΡΠ²ΠΎΠ΄Π΅ Π΅ΡΡΡ ΠΏΡΠΎΠ±Π΅Π»ΡΠ½ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ», ΡΠ°Π·Π΄Π΅Π»ΡΡΡΠΈΠΉ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΡΡΠΎΠΊ, ΡΠ»ΠΎΠ² ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΡΠ°ΠΉΠ»Π΅. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΡΡ Π·Π°ΠΏΠΈΡΡ $(wc -l $temp_file) Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π² Π²ΡΠ²ΠΎΠ΄Π΅ ΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° Π΅Π³ΠΎ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ linesfound. ΠΡΠ»ΠΈ Π±Ρ Π²Π°ΠΌ Π±ΡΠ» Π½ΡΠΆΠ΅Π½ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π΄Π°Π»Π΅Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ set Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ -ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ ΠΈΠ· Π²ΡΠ²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
ΠΠ·ΠΌΠ΅Π½ΠΈΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ IFS (Internal Field Separator, Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΏΠΎΠ»Π΅ΠΉ) Π½Π° Π·Π°ΠΏΡΡΡΡ, Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΠΏΠΎΠ»Ρ, ΡΠ°Π·Π³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠ΅ Π·Π°ΠΏΡΡΡΠΌΠΈ. ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ β ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ cut.
find_Ρd() {
if [ "$1" = "n" ]; then
asklist=n
else
asklist=y
fi
cdcatnum=""
echo -e "Enter a string to search for in the CD titles \c"
read searchstr
if [ "$searchstr" = "" ]; then
return 0
fi
grep "$searchstr" $title_file > $temp_file
set $(wc -l $temp_file)
linesfound=$1
case "$linesfound" in
0)
echo "Sorry, nothing found"
get_return
return 0 ;;
1) ;;
2)
echo "Sorry, not unique."
echo "Found the following"
cat $temp_file
get_return
return 0
esac
IFS=", "
read cdcatnum cdtitle cdtype cdac < $temp_file
IFS=" "
if [ -z "$cdcatnum" ]; then
echo "Sorry, could not extract catalog field from $temp_file"
get_return
return 0
fi
echo
echo Catalog number: $cdcatnum echo Title: $cdtitle
echo Type: $cdtype
echo Artist/Composer: $cdac
echo
get_return
if [ "$asklist" = "y" ]; then
echo -e "View tracks for this CD? \c"
read x
if [ "$x" = "y" ]; then
echo
list_tracks
echo
fi
fi
return 1
}
8. Π€ΡΠ½ΠΊΡΠΈΡ update_cd ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π²Π°ΠΌ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π²Π²Π΅ΡΡΠΈ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ-Π΄ΠΈΡΠΊΠ΅. Π£ΡΡΠΈΡΠ΅, ΡΡΠΎ Π²Ρ ΠΈΡΠΈΡΠ΅ (Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ grep) ΡΡΡΠΎΠΊΠΈ, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠ΅ΡΡ (^) Ρ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΈ $cdcatnum, Π·Π° ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ»Π΅Π΄ΡΠ΅Ρ ", " ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°ΠΊΠ»ΡΡΠΈΡΡ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ $cdcatnum Π² {}. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ Π·Π°ΠΏΡΡΡΡ Π±Π΅Π· ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ±Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΌΠ΅ΠΆΠ΄Ρ Π½Π΅ΠΉ ΠΈ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ {} Π΄Π»Ρ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π±Π»ΠΎΠΊΠ° ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ, Π΅ΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ get_confirm Π²Π΅ΡΠ½Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true.
update_cd() {
if [ -z "$cdcatnum" ]; then
echo "You must select a CD first"
find_cd n
fi
if [ -n "$cdcatnum" ]; then
echo "Current tracks are :-"
list_tracks
echo
echo "This will re-enter the tracks for $cdtitle"
get_confirm && {
grep -v "^${cdcatnum}, " $tracks_file > $temp_file
mv $temp_file $tracks_file
echo
add_record_tracks
}
fi
return
}
9. Π€ΡΠ½ΠΊΡΠΈΡ count_cds Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π±ΡΡΡΡΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠΈΡΠ°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ .
count_cds() {
set $(wc -l $title_file)
num_titles=$1
set $(wc -l $tracks_file)
num_tracks=$1
echo found $num_titles CDs, with a total of $num_tracks tracks
get_return
return
}
10. Π€ΡΠ½ΠΊΡΠΈΡ remove_records ΡΠ΄Π°Π»ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈΠ· ΡΠ°ΠΉΠ»ΠΎΠ² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ grep -v, ΡΠ΄Π°Π»ΡΡΡΠ΅ΠΉ Π²ΡΠ΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ. Π£ΡΡΠΈΡΠ΅, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ».
ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
grep -v "^$cdcatnum" > $title_file
ΡΠ°ΠΉΠ» $title_file ΡΡΠ°Π½Π΅Ρ ΠΏΡΡΡΡΠΌ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²ΡΠ²ΠΎΠ΄Π° > Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π° grep Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ ΡΠΈΡΠ°ΡΡ ΡΠΆΠ΅ ΠΏΡΡΡΠΎΠΉ ΡΠ°ΠΉΠ».
remove_records() {
if [ -z "$cdcatnum" ]; then
echo You must select a CD first find_cd n
fi
if [ -n "$cdcatnum" ]; then
echo "You are about to delete $cdtitle"
get_confirm && {
grep -v "^${cdcatnum}, " $title_file > $temp_file
mv $temp_file $title_file
grep -v "^${cdcatnum}, " $tracks_file > $temp_file
mv $temp_file $tracks_file
cdcatnum=""
echo Entry removed
}
get_return
fi
return
}
11. Π€ΡΠ½ΠΊΡΠΈΡ list_tracks ΡΠ½ΠΎΠ²Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ grep Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π½ΡΠΆΠ½ΡΡ Π²Π°ΠΌ ΡΡΡΠΎΠΊ, ΠΊΠΎΠΌΠ°Π½Π΄Ρ cut Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ ΠΏΠΎΠ»ΡΠΌ ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ more Π΄Π»Ρ ΠΏΠΎΡΡΡΠ°Π½ΠΈΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ²ΠΎΠ΄Π°. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘ Π·Π°ΠΉΠΌΠ΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΈΡ 20 Π½Π΅ΠΎΠ±ΡΡΠ½ΡΡ ΡΡΡΠΎΠΊ ΠΊΠΎΠ΄Π°, ΡΠΎ ΠΏΠΎΠΉΠΌΠ΅ΡΠ΅, ΠΊΠ°ΠΊΠΈΠΌ ΠΌΠΎΡΠ½ΡΠΌ ΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ°.
list_tracks() {
if [ "$cdcatnum" = "" ]; then
echo no CD selected yet
return
else
grep "^${cdcatnum}, " $tracks_file > $temp_file
num_tracks=${wc -l $temp_file}
if [ "$num_tracks" = "0" ]; then
echo no tracks found for $cdtitle
else
{
echo
echo "$cdtitle :-"
echo
cut -f 2- -d , $temp_file
echo
} | ${PAGER:-more}
fi
fi
get_return
return
}
12. Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ. ΠΠ΅ΡΠ²ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΡΠ°ΠΉΠ»Ρ Π² ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅; Π·Π°ΡΠ΅ΠΌ Π²Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ΅Π½Ρ set_menu_choice ΠΈ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅ΡΠ΅ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π΅Π΅ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ.
ΠΡΠ»ΠΈ Π²ΡΠ±ΡΠ°Π½ Π²Π°ΡΠΈΠ°Π½Ρ quit (Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅), Π²Ρ ΡΠ΄Π°Π»ΡΠ΅ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ», Π²ΡΠ²ΠΎΠ΄ΠΈΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Ρ ΡΡΠΏΠ΅ΡΠ½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ.
rm -f $temp_file
if [ ! -f $title_file ]; then
touch $title_file
fi
if [ ! -f $tracks_file ]; then
touch $tracks_file
fi
# Π’Π΅ΠΏΠ΅ΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
clear
echo
echo
echo "Mini CD manager" sleep 1
quit=n
while [ "$quit" != "y" ]; do
set_menu_choice
case "$menu_choice" in
a) add_records;;
r) remove records;;
f) find_cd y;;
u) update_cd;;
c) count_cds;;
l) list_tracks;;
b)
echo
more $title_file
echo
get return;;
q | Q ) quit=y;;
*) echo "Sorry, choice not recognized";;
esac
done
# Π£Π±ΠΈΡΠ°Π΅ΠΌ ΠΈ ΠΏΠΎΠΊΠΈΠ΄Π°Π΅ΠΌ
rm -f $temp_file echo "Finished"
exit 0
ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΡ, ΠΊΠ°ΡΠ°ΡΡΠΈΠ΅ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΠΎΠΌΠ°Π½Π΄Π° trap Π² Π½Π°ΡΠ°Π»Π΅ ΡΡΠ΅Π½Π°ΡΠΈΡ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠ° Π½Π°ΠΆΠ°ΡΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡ <Ctrt>+<C>. ΠΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΈΠ³Π½Π°Π» EXIT ΠΈΠ»ΠΈ INT, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°.
Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠ±ΠΎΡΠ° ΠΏΡΠ½ΠΊΡΠ° ΠΌΠ΅Π½Ρ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ select Π² ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ°Ρ bash ΠΈ ksh (ΠΊΠΎΡΠΎΡΠ°Ρ, ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ΅ X/Open). ΠΠ½Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ΅Π»Π΅ΠΊΡΠΎΡ ΠΏΡΠ½ΠΊΡΠΎΠ² ΠΌΠ΅Π½Ρ. ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ Π΅Π΅ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅, Π΅ΡΠ»ΠΈ Π²Π°Ρ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΡΠ΅Π±Π΅ Π±ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΅ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΡΠΌ. ΠΠ»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΠΌΠ½ΠΎΠ³ΠΎΡΡΡΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ Π·Π°ΠΌΠ΅ΡΠΈΠ»ΠΈ, ΡΡΠΎ Π½Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°, ΠΊΠΎΠ³Π΄Π° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π½ΠΎΠ²Π°Ρ Π·Π°ΠΏΠΈΡΡ; Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΎΡΡΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΡ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΊΠΎΠ΄ΠΎΠΌ, Π½ΠΎ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΈΡ Π΄ΠΎΡΠΎΠΆΠΊΠΈ Π² ΠΏΠ΅ΡΠ΅ΡΠ΅Π½Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ:
1 First CD Track 1
2 First CD Track 2
1 Another CD
2 With the same CD key
ΠΡ ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΡΡΠΎ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ Π² ΡΠ°ΡΡΠ΅ΡΠ΅ Π½Π° Π²Π°ΡΠ΅ Π²ΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠ²ΠΎΡΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΡΠ²ΡΡΡΡ ΠΏΡΠΈ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΠΎΠ²ΠΊΠ΅ Π²Π°ΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌΠΈ GPL.
Π Π΅Π·ΡΠΌΠ΅
Π ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ Π²Ρ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ, ΡΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ° β ΡΡΠΎ ΠΌΠΎΡΠ½ΡΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎ ΡΠ²ΠΎΠΈΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ. ΠΠ΅ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ Π»Π΅Π³ΠΊΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π΄Π΅Π»Π°ΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΠΌ ΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ, Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠ΅ΠΊΡΡΠ° ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ².