изменить каталог (cd), но, заменив только часть пути

Я обычно использую трюк sudo bash -c, или просто сделаю sudo -s первым, чтобы остаться в корне, а затем запустите команду перенаправления.

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

12
задан 6 September 2010 в 23:55

99 ответов

Не уверен в AIX, но я помню это как старый трюк оболочки Korn в ящиках Solaris, которые я использовал для администрирования. В вашем примере вы должны ввести команду:

  cd 2.0.1 1.0.8  

Дополнительная информация здесь .

1
ответ дан 4 August 2018 в 21:05
  cd `pwd |  sed 's / 2 \ .0 \ .1 / 1 \ .0 \ .8 /' ` 

Однако это не очень красиво. Вы можете немного поработать, поставив его в функцию:

  function mycd {cd `pwd |  sed s $ 1`}  

И затем называть его следующим:

  mycd '/2\.0\.1/1.0.8/'  

Однако вам все равно нужно избегать точек, но я уверен, что с этим можно поработать, подумав немного.

3
ответ дан 4 August 2018 в 21:05

Я сам использовал (и пропустил) эту функцию. Это зависит от того, какой вкус и / или выпуск * nix вы используете. Если вы используете bash, вот удобный способ расширить встроенный компакт-диск, чтобы включить эту функцию. Поместите это в свой .bashrc (или для проверки вставьте его в свою оболочку bash и нажмите enter).

  function cd () {if [$ # -eq 2];  затем встроенный cd $ {PWD / $ 1 / $ 2};  else builtin cd $ 1;  fi}  
7
ответ дан 4 August 2018 в 21:05

Если вы являетесь поклонником vi, вы можете включить режим vi в своей оболочке (например, bash set -o vi) и использовать командный режим vi ...

Или вы могли бы сделать сумасшедшую историю расширение (проверено в zsh, возможно, также в bash):

  $ cd /etc/application-1.0.8/options/default cd: нет такого файла или каталога: / etc / application-  1.0.8 / options / default $ !!: s / 1.0.8 / 2.0.1 / cd /etc/application-2.0.1/options/default cd: нет такого файла или каталога: /etc/application-2.0.1  / options / default  
3
ответ дан 4 August 2018 в 21:05

Это должно работать в bash на ubuntu 10.04: cd $ {PWD / old / new} . В основном это заменяет первое появление old в вашем текущем рабочем каталоге с новым . 2 примера ниже.

Пример 1

  ing02741 @ hoster: ~ $ cd / home / ing02741 / Видео / ing02741 @ hoster: ~ / Videos $ cd $ {PWD / ing02741 / koushik}  ing02741 @ hoster: / home / koushik / Videos $  

Пример 2

  ing02741 @ hoster: ~ / src / cdtest $ mkdir dir-v1.0.1  dir-v2.2.2 dir-v3.0.7 ing02741 @ hoster: ~ / src / cdtest $ mkdir dir-v1.0.1 / ind dir-v2.2.2 / ind dir-v3.0.7 / ind ing02741 @ hoster: ~ / src /  cdtest $ cd dir-v1.0.1 / ind / ing02741 @ hoster: ~ / src / cdtest / dir-v1.0.1 / ind $ cd $ {PWD / 1.0.1 / 2.2.2} ing02741 @ hoster: ~ / src /  cdtest / dir-v2.2.2 / ind $  

Заимствуя идею sepp2k выше, вы можете сделать такую ​​функцию

  mycd {cd $  {PWD / $ 1 / $ 2}}  

, а затем используйте что-то вроде mycd 2.0.1 1.0.8 для переключения.

9
ответ дан 4 August 2018 в 21:05

Вероятно, вы помните о расширении истории. Я не знаю, что было в вашей оболочке в AIX, но один из способов сделать это в bash - ^ 2.0.1 ^ 1.0.8 .

Расширение истории меньше полезно с оболочками, такими как bash и zsh, которые имеют мощное редактирование командной строки. Вы можете использовать клавиши со стрелками для вызова предыдущих команд и Alt +. для вставки последнего слова предыдущей команды (дважды нажмите его, чтобы довести команду до этого и т. д.).

7
ответ дан 4 August 2018 в 21:05

Чтобы использовать -P | -L | - , используйте следующее:

  function cd () {typeset arg = case $ 1 in - | -L  | -P) arg = $ 1;  сдвиг ;;  esac [$ # -gt 1] & amp; & amp; & amp;  {builtin cd $ arg "$ {PWD / $ 1 / $ 2}"} ||  {builtin cd $ arg "$ @"}}  
0
ответ дан 4 August 2018 в 21:05
  ^ 2.0.1 ^ 1.0.8  

Вышеупомянутая команда swap 2.0.1 - 1.0.8 в последней команде, ее работа в bash

3
ответ дан 6 August 2018 в 04:35

Не уверен в AIX, но я помню это как старый трюк оболочки Korn в ящиках Solaris, которые я использовал для администрирования. В вашем примере вы должны ввести команду:

  cd 2.0.1 1.0.8  

Дополнительная информация здесь .

1
ответ дан 6 August 2018 в 04:35
  cd `pwd |  sed 's / 2 \ .0 \ .1 / 1 \ .0 \ .8 /' ` 

Однако это не очень красиво. Вы можете немного поработать, поставив его в функцию:

  function mycd {cd `pwd |  sed s $ 1`}  

И затем называть его следующим:

  mycd '/2\.0\.1/1.0.8/'  

Однако вам все равно нужно избегать точек, но я уверен, что с этим можно поработать, подумав немного.

3
ответ дан 6 August 2018 в 04:35

Я сам использовал (и пропустил) эту функцию. Это зависит от того, какой вкус и / или выпуск * nix вы используете. Если вы используете bash, вот удобный способ расширить встроенный компакт-диск, чтобы включить эту функцию. Поместите это в свой .bashrc (или для проверки вставьте его в свою оболочку bash и нажмите enter).

  function cd () {if [$ # -eq 2];  затем встроенный cd $ {PWD / $ 1 / $ 2};  else builtin cd $ 1;  fi}  
7
ответ дан 6 August 2018 в 04:35

Если вы являетесь поклонником vi, вы можете включить режим vi в своей оболочке (например, bash set -o vi) и использовать командный режим vi ...

Или вы могли бы сделать сумасшедшую историю расширение (проверено в zsh, возможно, также в bash):

  $ cd /etc/application-1.0.8/options/default cd: нет такого файла или каталога: / etc / application-  1.0.8 / options / default $ !!: s / 1.0.8 / 2.0.1 / cd /etc/application-2.0.1/options/default cd: нет такого файла или каталога: /etc/application-2.0.1  / options / default  
3
ответ дан 6 August 2018 в 04:35

Это должно работать в bash на ubuntu 10.04: cd $ {PWD / old / new} . В основном это заменяет первое появление old в вашем текущем рабочем каталоге с новым . 2 примера ниже.

Пример 1

  ing02741 @ hoster: ~ $ cd / home / ing02741 / Видео / ing02741 @ hoster: ~ / Videos $ cd $ {PWD / ing02741 / koushik}  ing02741 @ hoster: / home / koushik / Videos $  

Пример 2

  ing02741 @ hoster: ~ / src / cdtest $ mkdir dir-v1.0.1  dir-v2.2.2 dir-v3.0.7 ing02741 @ hoster: ~ / src / cdtest $ mkdir dir-v1.0.1 / ind dir-v2.2.2 / ind dir-v3.0.7 / ind ing02741 @ hoster: ~ / src /  cdtest $ cd dir-v1.0.1 / ind / ing02741 @ hoster: ~ / src / cdtest / dir-v1.0.1 / ind $ cd $ {PWD / 1.0.1 / 2.2.2} ing02741 @ hoster: ~ / src /  cdtest / dir-v2.2.2 / ind $  

Заимствуя идею sepp2k выше, вы можете сделать такую ​​функцию

  mycd {cd $  {PWD / $ 1 / $ 2}}  

, а затем используйте что-то вроде mycd 2.0.1 1.0.8 для переключения.

9
ответ дан 6 August 2018 в 04:35

Чтобы использовать -P | -L | - , используйте следующее:

  function cd () {typeset arg = case $ 1 in - | -L  | -P) arg = $ 1;  сдвиг ;;  esac [$ # -gt 1] & amp; & amp; & amp;  {builtin cd $ arg "$ {PWD / $ 1 / $ 2}"} ||  {builtin cd $ arg "$ @"}}  
0
ответ дан 6 August 2018 в 04:35

Вероятно, вы помните о расширении истории. Я не знаю, что было в вашей оболочке в AIX, но один способ сделать это в bash - ^ 2.0.1 ^ 1.0.8 .

Расширение истории меньше полезно с оболочками, такими как bash и zsh, которые имеют мощное редактирование командной строки. Вы можете использовать клавиши со стрелками для вызова предыдущих команд и Alt +. для вставки последнего слова предыдущей команды (дважды нажмите его, чтобы довести команду до этого и т. д.).

7
ответ дан 6 August 2018 в 04:35
  ^ 2.0.1 ^ 1.0.8  

Вышеупомянутая команда swap 2.0.1 - 1.0.8 в последней команде, ее работа в bash

3
ответ дан 7 August 2018 в 22:45

Не уверен в AIX, но я помню это как старый трюк оболочки Korn в ящиках Solaris, которые я использовал для администрирования. В вашем примере вы должны ввести команду:

  cd 2.0.1 1.0.8  

Дополнительная информация здесь .

1
ответ дан 7 August 2018 в 22:45

Я сам использовал (и пропустил) эту функцию. Это зависит от того, какой вкус и / или выпуск * nix вы используете. Если вы используете bash, вот удобный способ расширить встроенный компакт-диск, чтобы включить эту функцию. Поместите это в свой .bashrc (или для проверки вставьте его в свою оболочку bash и нажмите enter).

  function cd () {if [$ # -eq 2];  затем встроенный cd $ {PWD / $ 1 / $ 2};  else builtin cd $ 1;  fi}  
7
ответ дан 7 August 2018 в 22:45
  cd `pwd |  sed 's / 2 \ .0 \ .1 / 1 \ .0 \ .8 /' ` 

Однако это не очень красиво. Вы можете немного поработать, поставив его в функцию:

  function mycd {cd `pwd |  sed s $ 1`}  

И затем называть его следующим:

  mycd '/2\.0\.1/1.0.8/'  

Однако вам все равно нужно избегать точек, но я уверен, что с этим можно поработать, подумав немного.

3
ответ дан 7 August 2018 в 22:45

Если вы являетесь поклонником vi, вы можете включить режим vi в своей оболочке (например, bash set -o vi) и использовать командный режим vi ...

Или вы могли бы сделать сумасшедшую историю расширение (проверено в zsh, возможно, также в bash):

  $ cd /etc/application-1.0.8/options/default cd: нет такого файла или каталога: / etc / application-  1.0.8 / options / default $ !!: s / 1.0.8 / 2.0.1 / cd /etc/application-2.0.1/options/default cd: нет такого файла или каталога: /etc/application-2.0.1  / options / default  
3
ответ дан 7 August 2018 в 22:45

Это должно работать в bash на ubuntu 10.04: cd $ {PWD / old / new} . В основном это заменяет первое появление old в вашем текущем рабочем каталоге с новым . 2 примера ниже.

Пример 1

  ing02741 @ hoster: ~ $ cd / home / ing02741 / Видео / ing02741 @ hoster: ~ / Videos $ cd $ {PWD / ing02741 / koushik}  ing02741 @ hoster: / home / koushik / Videos $  

Пример 2

  ing02741 @ hoster: ~ / src / cdtest $ mkdir dir-v1.0.1  dir-v2.2.2 dir-v3.0.7 ing02741 @ hoster: ~ / src / cdtest $ mkdir dir-v1.0.1 / ind dir-v2.2.2 / ind dir-v3.0.7 / ind ing02741 @ hoster: ~ / src /  cdtest $ cd dir-v1.0.1 / ind / ing02741 @ hoster: ~ / src / cdtest / dir-v1.0.1 / ind $ cd $ {PWD / 1.0.1 / 2.2.2} ing02741 @ hoster: ~ / src /  cdtest / dir-v2.2.2 / ind $  

Заимствуя идею sepp2k выше, вы можете сделать такую ​​функцию

  mycd {cd $  {PWD / $ 1 / $ 2}}  

, а затем используйте что-то вроде mycd 2.0.1 1.0.8 для переключения.

9
ответ дан 7 August 2018 в 22:45

Чтобы использовать -P | -L | - , используйте следующее:

  function cd () {typeset arg = case $ 1 in - | -L  | -P) arg = $ 1;  сдвиг ;;  esac [$ # -gt 1] & amp; & amp; & amp;  {builtin cd $ arg "$ {PWD / $ 1 / $ 2}"} ||  {builtin cd $ arg "$ @"}}  
0
ответ дан 7 August 2018 в 22:45

Вероятно, вы помните о расширении истории. Я не знаю, что было в вашей оболочке в AIX, но один способ сделать это в bash - ^ 2.0.1 ^ 1.0.8 .

Расширение истории меньше полезно с оболочками, такими как bash и zsh, которые имеют мощное редактирование командной строки. Вы можете использовать клавиши со стрелками для вызова предыдущих команд и Alt +. для вставки последнего слова предыдущей команды (дважды нажмите его, чтобы довести команду до этого и т. д.).

7
ответ дан 7 August 2018 в 22:45

Это должно работать в bash на ubuntu 10.04: cd $ {PWD / old / new} . В основном это заменяет первое появление old в вашем текущем рабочем каталоге с новым . 2 примера ниже.

Пример 1

  ing02741 @ hoster: ~ $ cd / home / ing02741 / Видео / ing02741 @ hoster: ~ / Videos $ cd $ {PWD / ing02741 / koushik}  ing02741 @ hoster: / home / koushik / Videos $  

Пример 2

  ing02741 @ hoster: ~ / src / cdtest $ mkdir dir-v1.0.1  dir-v2.2.2 dir-v3.0.7 ing02741 @ hoster: ~ / src / cdtest $ mkdir dir-v1.0.1 / ind dir-v2.2.2 / ind dir-v3.0.7 / ind ing02741 @ hoster: ~ / src /  cdtest $ cd dir-v1.0.1 / ind / ing02741 @ hoster: ~ / src / cdtest / dir-v1.0.1 / ind $ cd $ {PWD / 1.0.1 / 2.2.2} ing02741 @ hoster: ~ / src /  cdtest / dir-v2.2.2 / ind $  

Заимствуя идею sepp2k выше, вы можете сделать такую ​​функцию

  mycd {cd $  {PWD / $ 1 / $ 2}}  

, а затем используйте что-то вроде mycd 2.0.1 1.0.8 для переключения.

9
ответ дан 10 August 2018 в 10:51

Вероятно, вы помните о расширении истории. Я не знаю, что было в вашей оболочке в AIX, но один способ сделать это в bash - ^ 2.0.1 ^ 1.0.8 .

Расширение истории меньше полезно с оболочками, такими как bash и zsh, которые имеют мощное редактирование командной строки. Вы можете использовать клавиши со стрелками для вызова предыдущих команд и Alt +. для вставки последнего слова предыдущей команды (дважды нажмите его, чтобы довести команду до этого и т. д.).

7
ответ дан 10 August 2018 в 10:51

Не уверен в AIX, но я помню это как старый трюк оболочки Korn в ящиках Solaris, которые я использовал для администрирования. В вашем примере вы должны ввести команду:

  cd 2.0.1 1.0.8  

Дополнительная информация здесь .

1
ответ дан 10 August 2018 в 10:51
  cd `pwd |  sed 's / 2 \ .0 \ .1 / 1 \ .0 \ .8 /' ` 

Однако это не очень красиво. Вы можете немного поработать, поставив его в функцию:

  function mycd {cd `pwd |  sed s $ 1`}  

И затем называть его следующим:

  mycd '/2\.0\.1/1.0.8/'  

Однако вам все равно нужно избегать точек, но я уверен, что с этим можно поработать, подумав немного.

3
ответ дан 10 August 2018 в 10:51
  ^ 2.0.1 ^ 1.0.8  

Вышеупомянутая команда swap 2.0.1 - 1.0.8 в последней команде, ее работа в bash

3
ответ дан 10 August 2018 в 10:51

Я сам использовал (и пропустил) эту функцию. Это зависит от того, какой вкус и / или выпуск * nix вы используете. Если вы используете bash, вот удобный способ расширить встроенный компакт-диск, чтобы включить эту функцию. Поместите это в свой .bashrc (или для проверки вставьте его в свою оболочку bash и нажмите enter).

  function cd () {if [$ # -eq 2];  затем встроенный cd $ {PWD / $ 1 / $ 2};  else builtin cd $ 1;  fi}  
7
ответ дан 10 August 2018 в 10:51

Чтобы использовать -P | -L | - , используйте следующее:

  function cd () {typeset arg = case $ 1 in - | -L  | -P) arg = $ 1;  сдвиг ;;  esac [$ # -gt 1] & amp; & amp; & amp;  {builtin cd $ arg "$ {PWD / $ 1 / $ 2}"} ||  {builtin cd $ arg "$ @"}}  
0
ответ дан 10 August 2018 в 10:51

Другие вопросы по тегам:

Похожие вопросы: