Intereting Posts
Почему ZSH заканчивает линию выделенным символом процента? Подсчитать количество значений в пределах диапазона в определенном столбце Поиск совпадающих файлов с подстановочными знаками без использования find в сценарии bash Обновление до тестирования Debian показывает только белый шум Могу ли я восстановить файл gzip точно, учитывая исходный несжатый файл? что означает «gbp: error: upstream / 1.5.13 не является допустимым деревом»? Проблемы с установкой Dropbox в Scientific Linux смола параллельно Передайте список каталогов (содержащих пробелы) в команду в скрипте Как поменять файл (журнал), который процесс открыл с символической ссылкой на другой файл? Поддержка почты IPV4 в Linux найти, какая система передает через конкретный порт как получить список всех процессов, обращающихся к общей библиотеке как я могу использовать sed для замены списков, начинающихся с (*) в файле Могу ли я установить внешний вид для GNOME Debian?

Ошибка преобразования функции bash в псевдоним csh

Я пишу псевдоним csh, так что я могу использовать следующую функцию bash в моем csh:

function up( ) { LIMIT=$1 P=$PWD for ((i=1; i <= LIMIT; i++)) do P=$P/.. done cd $P export MPWD=$P } 

(Я украл вышеупомянутую функцию bash отсюда )

Я написал это:

 alias up 'set LIMIT=$1; set P=$PWD; set counter = LIMIT; while[counter!=0] set counter = counter-1; P=$P/.. ; end cd $P; setenv MPWD=$P' 

Однако я получаю следующую ошибку:

 while[counter!=0]: No match. P=/net/devstorage/home/rghosh/..: Command not found. end: Too many arguments. 

и мой сценарий не работает должным образом. Я читаю здесь csh отсюда .

Я не эксперт в csh, и то, что я написал выше, является моим первым скриптом csh. Пожалуйста, дайте мне знать, что я делаю неправильно.

Я не уверен, что даже можно сделать цикл while на одной линии. Но есть несколько исправляемых ошибок:

  • while[counter!=0] должен быть while ($counter != 1) (обратите внимание на пробелы до и после « != »).
  • set counter = counter-1 должен быть @ counter = $counter – 1 (обратите внимание на пробелы до и после ' ').
  • P=$P/.. следует set P=$P/.. – или еще лучше, set P="$P/.." (в случае, если $P содержит пространство (s).
  • Который напоминает мне, set P=$PWD должен быть set P="$PWD" , cd $P должен быть cd "$P" , а setenv MPWD=$P должен быть setenv MPWD="$P" , все для того же причина.
  • И, если вам удастся получить цикл while на одной строке для работы, вам, вероятно, понадобится ; после end .