Intereting Posts
Разрешенные и безопасные символы для файловой системы ZFS во FreeBSD Специальные URI от Nautilus Настройте беспроводной адаптер USB при подключении к сети Движение текста в текстовых полях Использование исходной команды bash возвращает ошибку, хотя она успешно прочитала конфигурационный файл Процессы дочернего процесса Linux не отбираются возможность запуска демонов под привилегированными пользователями во время загрузки Мой рукописный C + + Makefile дает команду не найдена systemd: запуск сценария при завершении работы после того, как файловые системы установлены только для чтения Как найти копии данных данного файла в файловой системе Btrfs? Ошибка «Ошибка: разрешение отказа» от Transfer Client Сбросить бит setgid с числовым режимом chmod развернуть программу c ++ с поддержкой c ++ 11 на старой машине CentOS Как начать два процесса, поддерживаемых свиньями? Итак, первый заканчивается, когда второй заканчивается? Сжатие и удаление исходного каталога с ограниченным хранилищем

Ошибка преобразования функции 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 .