Intereting Posts
Какую установку человек находит для имени команды? GNOME: используйте WinKey (Super_L) в качестве главного меню для переключения Открытие ссылок за пределами браузера в kubuntu открывает html только из локального кэша kde Проблема с изменением каталога / home в другом месте Логин IMAP не распознает SASL, тогда как простой постфикс отправляет как извлечь определенные столбцы Как обрабатывать Linux RAID0 и Windows с чередованием динамических томов на одном и том же жестком диске? Сообщения Mutt Outlook искажены Удаление пакетов, установленных debuginfo-install Почему тесты bash настолько разборчивы по поводу пробелов? SSH-Config – Есть ли способ определить, локальный или удаленный? Двойная загрузка Linux Mint в жестком диске стиля GPT вместе с Windows 8 Как рассчитать физическую длину сетевого кабеля с помощью стандартных команд Linux? Мониторинг кластера графического процессора Перенаправление Stderr неожиданно перенаправляет также некоторые встроенные функции BASH

Только если в «/»: alias ls = 'ls -I test'?

У меня есть в моем ~/.bashrc чтобы скрыть список test из вывода ls :

 alias ls='ls -I test' 

Но я хочу, чтобы это спрятало test если мой текущий рабочий каталог является корневой ( / ) папкой, а не если я в какой-то другой папке.

Как я могу это достичь?

Что-то вроде этого я думал, что это сработает:

 alias ls='[[ "$PWD" = "/" ]] && ls -I test ||ls' 

$PWD – текущий рабочий каталог
&& имеет действие для выполнения, если pwd равно / (условие check = true)
|| имеет действие для выполнения, если pwd не является / (условие check = false)

Но после тщательного тестирования выше решение НЕ РАБОТАЕТ правильно.

С другой стороны, это будет работать как альтернатива функциям:

 alias ls='{ [[ "$PWD" == "/" ]] && a="-I tmp2" ||a=""; };ls $a ' 

Или даже лучше, подобно другим ответам, но без функции:

 alias lstest='{ [[ "$PWD" == "/" ]] && set -- "-I" "tmp2" || set --; }; ls "$@"' 

Возможные дополнительные флаги и / или полные пути, указанные в командной строке при вызове этого псевдонима, сохраняются и отправляются в ls.

 ls () { case "$PWD" in /) command ls -I test "$@" ;; *) command ls "$@" ;; esac } 

Вышеупомянутая функция оболочки проверит текущий каталог против / и выполнит команду (GNU) ls разному в зависимости от результата теста.

"$@" будет заменен параметрами командной строки и операндами в исходной командной строке.

Нам нужно использовать command ls а не только ls в функции, чтобы обойти поиск функции оболочки для ls (что даст нам приятную бесконечную рекурсию).

Обратите внимание, что это не будет использовать шаблон игнорирования, если вы делаете ls / из другого места, и что он будет использовать шаблон игнорирования, если это делается, например, ls /home/dvoo из / .

Чтобы было легче запомнить, что это на самом деле (через шесть месяцев после того, как вы задаетесь вопросом, что он делает), используйте длинные опции:

 ls () { case "$PWD" in /) command ls --ignore='test' "$@" ;; *) command ls "$@" ;; esac } 

Используйте функцию, которая проверяет, находитесь ли вы в / для ls :

 ls () { if [[ "$PWD" == / ]] then command ls -I test "$@" else command ls "$@" fi } 

Таким образом, все аргументы, которые вы передаете ls будут по-прежнему использоваться.

Или:

 ls () { if [ "$PWD" == / ] then set -- -I test "$@" fi command ls "$@" }