[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Help-bash] Ruler
From: |
Greg Wooledge |
Subject: |
Re: [Help-bash] Ruler |
Date: |
Fri, 18 Dec 2015 08:16:44 -0500 |
User-agent: |
Mutt/1.4.2.3i |
On Fri, Dec 18, 2015 at 01:03:07AM +0000, Val Krem wrote:
> I want write it in script and put in the bin so that I can call from anywhere
> to use it.
>
> >bash$ ruler filename
>
> can you please help me how to do that.
To refresh everyone's memory (I am bringing this BACK to the mailing
list where it belongs), here's the function I wrote:
ruler() {
local cols=${COLUMNS:-$(tput cols)}
local i n tmp
if (( ${#_ruler_line1} < cols )); then
n=$(( ${#_ruler_line1} / 10 ))
for ((i=n+1; i*10 <= cols; i++)); do
printf -v tmp %10d "$i"
_ruler_line1+=$tmp
done
fi
while (( ${#_ruler_line2} < cols )); do
_ruler_line2+=1234567890
done
echo "${_ruler_line1:0:cols}"
echo "${_ruler_line2:0:cols}"
cat "$@"
}
If you simply paste that into your ~/.bashrc file and then open a new
terminal (or run "exec bash" in an existing terminal) you can use it
as a command.
If you really want to convert it into a script, then open a new file
(call it "ruler", with no extension) and put this in it:
#!/usr/bin/env bash
cols=${COLUMNS:-$(tput cols)}
unset _ruler_line1 _ruler_line2
if (( ${#_ruler_line1} < cols )); then
n=$(( ${#_ruler_line1} / 10 ))
for ((i=n+1; i*10 <= cols; i++)); do
printf -v tmp %10d "$i"
_ruler_line1+=$tmp
done
fi
while (( ${#_ruler_line2} < cols )); do
_ruler_line2+=1234567890
done
echo "${_ruler_line1:0:cols}"
echo "${_ruler_line2:0:cols}"
cat "$@"
Then move or copy the file to any directory that is in your PATH variable.
Personally I would suggest that you create the directory ~/bin/ and put
the script in there. Then add :~/bin to the end of your PATH variable,
which you would do in one of your dot files. If you don't like this
approach, you can become super-user and put the script in /usr/local/bin.
In any case, wherever you end up putting the script, you need to make
it executable. So, in addition to moving/copying it, you also need to
run:
chmod +x ruler
Doing it as a function is simpler, and more efficient. Doing it as a
script in a global location like /usr/local/bin makes it available to
other users on your system, and allows it to be invoked from other
commands like find.
See also:
http://mywiki.wooledge.org/BashGuide
http://mywiki.wooledge.org/DotFiles
- Re: [Help-bash] Ruler,
Greg Wooledge <=