Pull to refresh

Comments 36

«Как много нам открытий чудных
Сегодня дарит мануал!» ©

Спасибо, я не задумывался про такую штуку.
UFO just landed and posted this here
UFO just landed and posted this here
Я давненько сделал себе в zsh что-то в это роде:
md() {
mkdir $1 && cd $1
}
но вот беда, с sudo не работает, не знаете как решить?
Сделать внешний скрипт (например, /usr/local/bin/md) либо скопировать эту функцию в zrh root'а.
мне кажется, с zshrc рута не заработает, потому как sudo -u username md тоже не работает, прийдется делать скрипт, но это как-то не красиво.
Может есть возможность реализовать через alias?
Через внешнюю программу или скрипт такое реализовать нельзя, т.к. текущий каталог — это свойство каждого процесса. В данном случае каталог сменится только для вызванной программы или интерпретатора скрипта. Ваш же шелл «останется» в том же каталоге, что и до вызова.
Для этого есть eval например:

#!/bin/sh
function md() {
sudo mkdir -p $1 &&
cd $1 &&
DIR=`pwd` &&
eval «cd $DIR»
}

(Правда не знаю, заработает ли для zsh, я его не использую).
Внешний IP еще можно посмотреть так:

$ curl ifconfig.me
А как посмотреть внутренний IP? Тот, что в ifconfig?

Хочу сделать скрипт, который покажет при логине имя сервера и его IP.
Распарсить вывод ifconfig. Например, так:

ifconfig [interface name] | grep inet | grep -v inet6 | cut -d ":" -f 2 | cut -d " " -f 1

В разных *nix-системах формат вывода ifconfig может отличаться, поэтому, возможно, придётся скорректировать скрипт под конкретную модификацию ifconfig.
В разных *nix-системах формат вывода ifconfig может отличаться, поэтому, возможно, придётся скорректировать скрипт под конкретную модификацию ifconfig.

А можно и так:
ip addr show <интерфейс>|grep inet\ |read i j k l m n o;echo $j|sed 's/\/.*$//'
net-tools давно устарели, отдельные дистрибутивы уже всерьёз думают о переходе на iproute2.
UFO just landed and posted this here
>hostname -i
127.0.0.1

Нет, оно не врёт, но…
или так:
ifconfig eth0|gawk '/inet addr/{print $2}'|gawk -F: '{print $2}'

Встречал такое решение:
/usr/local/sbin/motd.sh
#!/bin/sh
IFCONFIG=`which ifconfig 2>/dev/null||echo /sbin/ifconfig`
IPADDR=`LANG=en_US.UTF-8 $IFCONFIG eth0|gawk '/inet addr/{print $2}'|gawk -F: '{print $2}'`
MSJ_NO_IP_DHCP="If you could not get a DHCP IP address please type setup and select \"Network configuration\" to set up a static IP."

echo ""
echo "Welcome to Elastix "
echo "----------------------------------------------------"
echo ""
#echo "For access to the Elastix web GUI use this URL"
echo "To access your Elastix System, using a separate workstation (PC/MAC/Linux)"
echo "Open the Internet Browser using the following URL:"

if [ "$IPADDR" = "" ]; then
echo "http://<YOUR-IP-HERE>"
echo "$MSJ_NO_IP_DHCP"
else
echo "http://$IPADDR"
fi

echo ""



/etc/rc.local
/usr/local/sbin/motd.sh > /etc/motd
Вот еще от меня алиас, вдруг кому пригодится:
alias pwget='ssh alex@pasechnik screen -m -d wget -P /srv/samba/share --append-output=/srv/samba/share/pwget.log'
Давно использую, и с иерархией файлов. И удивлен, что не так много людей, знающих тонкости консоли…
Предчувствую появление ИТТ тролля, который крайне тонко пройдется по поводу тонкостей консоли

Крайне полезная штука, я кстати не знал — хотя линь использую со времен 7го редхэта… Shame on me
Ага :)
Ну, я в свое время много в удаленке провел, без графики. А тут уже и zsh, и различные скрипты, и обустраивание своего рабочего места. Много читал, многое перепробовал… Дажу систему ронял экспериментами. Для меня консоль — преимущество + независимость/универсальность + необходимость.
А тролль может и появиться, правда в этой теме его щедро накормят минусами :)
А чем функция лучше, чем файл со скриптом (кроме отсутствия необходимости создания отдельного файла)?
На мой вкус отдельный скрипт наоборот лучше тем, что его можно без проблем запускать от имени любого юзера, а также через sudo. А вот с запуском функции из вашего bashrc от другого юзера или через sudo надо ещё как-то заморочиться.
«не обязательно писать скрипт» != «лучше не писать»
wget -q -O — checkip.dyndns.com/ | awk '{print $6}'| sed 's/<.*>//'

curl ifconfig.me
Давайте тогда делиться прикольными PS1 :)
export PS1='\[\e[37;42;1m\]\u@\h\[\e[0m\]\[\e[30;1m\] \d $(date +%H:%M:%S%P)\n\[\e[32;1m\]\w/\[\e[0m\]'
Мне вот такой нравится (сразу весь bashrc, так как интерактивный):

# Check for an interactive session
[ -z "$PS1" ] && return

alias ls='ls --color=auto'

PS1='[\u@\h \W]\$ '

bash_prompt() {
local NONE="\[\033[0m\]" # unsets color to term's fg color

# regular colors
local K="\[\033[0;30m\]" # black
local R="\[\033[0;31m\]" # red
local G="\[\033[0;32m\]" # green
local Y="\[\033[0;33m\]" # yellow
local B="\[\033[0;34m\]" # blue
local M="\[\033[0;35m\]" # magenta
local C="\[\033[0;36m\]" # cyan
local W="\[\033[0;37m\]" # white

# emphasized (bolded) colors
local EMK="\[\033[1;30m\]"
local EMR="\[\033[1;31m\]"
local EMG="\[\033[1;32m\]"
local EMY="\[\033[1;33m\]"
local EMB="\[\033[1;34m\]"
local EMM="\[\033[1;35m\]"
local EMC="\[\033[1;36m\]"
local EMW="\[\033[1;37m\]"

# background colors
local BGK="\[\033[40m\]"
local BGR="\[\033[41m\]"
local BGG="\[\033[42m\]"
local BGY="\[\033[43m\]"
local BGB="\[\033[44m\]"
local BGM="\[\033[45m\]"
local BGC="\[\033[46m\]"
local BGW="\[\033[47m\]"

case $TERM in
xterm*|rxvt*)
if [ `echo $SSH_CLIENT | wc -c` -gt 1 ]; then SSH_FLAG=1; fi
if [ `/usr/bin/whoami` = "root" ]; then ROOT_FLAG=1; fi
if ([ "$SSH_FLAG" = 1 ] && [ "$ROOT_FLAG" = 1 ]); then
local TITLEBAR='\[\033]0;[SSH] \u@\h\007\]'
PS1="$TITLEBAR${R}[!] ${G}\u${Y}@\h ${W}at ${C}\W ${W}>:/ "
elif [ "$SSH_FLAG" = 1 ]; then
local TITLEBAR='\[\033]0;[SSH] \u@\h\007\]'
PS1="$TITLEBAR${EMR}[SSH]${G}\u${Y}@\h ${W}at ${C}\W ${W}>:/ "
elif [ "$ROOT_FLAG" = 1 ]; then
local TITLEBAR='\[\033]0;\u@\h\007\]'
PS1="$TITLEBAR${R}[!] ${G}\u${Y}@\h ${W}at ${C}\W ${W}>:/ "
else
local TITLEBAR='\[\033]0;\u@\h\007\]'
PS1="$TITLEBAR${G}\u${Y}@\h ${W}at ${C}\W ${W}>:/ "
fi
;;
*)
if [ "$SSH_FLAG" = 1 ]; then
PS1="[SSH]$PS1"
fi
if [ `/usr/bin/whoami` = "root" ]; then ROOT_FLAG=1; fi
if [ "$ROOT_FLAG" = 1 ]; then
PS1="$TITLEBAR${R}[!] ${G}\u${Y}@\h ${W}at ${C}\W ${W}>:/ "
else
PS1="$TITLEBAR${G}\u${Y}@\h ${W}at ${C}\W ${W}>:/ "
fi
;;
esac
}

bash_prompt
Мне кажется, у вас опечатка в строчке:

if [ -f~/.bash_func ]; then

… отсутсвует пробел после -f (прошу прощения за разорванный комментарий).
Вроде не критично, но поправил, спасибо :)
Ну как же не критично: без пробела test(1) воспримет -f не как параметр, а как часть строки; таким образом, условие всегда будет истинным, независимо от наличия файла (т.к. строка всегда не пустая).
нет, воспринимается как параметр. image и vim подсвечивает правильно.

uname -a
Linux comp 3.0.0-rc1 #1 SMP Sun Jun 5 18:17:00 MSD 2011 x86_64 x86_64 x86_64 GNU/Linux

cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=11.04
DISTRIB_CODENAME=natty
DISTRIB_DESCRIPTION="Ubuntu 11.04"

Может быть, у вас какая-то странная убунта, но на всех шеллах и операционках, что я встречал, поведение такое:

$ [ -f /etc/passwd ] && echo ok || echo fuck
ok
$ [ -f /fuck/passwd ] && echo ok || echo fuck
fuck
$ [ -f/fuck/passwd ] && echo ok || echo fuck
ok


Как видите, на непустую строку test(1) возвращает true.
понял. Спасибо. Ubunt`a нормальная :)
Пробел действительно нужен
wanip6() {
wget -q -O — ip6.me/ | head -6 | tail -1 | sed -e :a -e 's/<[^>]*>//g;/</N;//ba'
}
Sign up to leave a comment.

Articles