Заменить имя файла на содержащее имя папки (csh)

Для переменных можно использовать анонимную функцию (как указано в комментарии выше). Это означает, что вы можете определить столько переменных, сколько захотите. Те, которые вы хотите скрыть от вызывающего абонента, вы ставите префиксом local , те, которые вы хотите передать вызывающему абоненту, вы просто определяете как обычно:

function {
  local my_var=foo
  your_var=bar
  : ...
}

Но для функций, которые не будут работать, поскольку они не могут быть объявлены местный . У меня была эта проблема в моем zshrc , и я решил добавить ко всем именам моих «локальных» функций короткую строку (как вы делаете пространства имен в C) и выполнить функцию подстановочного знака в конец:

function foo-do-something () {
  : ...
}
function foo-do-some-more-stuff () {
  : ...
}
function foo-main () {
  local my_var=oof
  you_var=rab
  foo-do-something for bar
  foo-do-some-more-stuff with baz
}
foo-main
unfunction -m 'foo-*'

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

1
13.04.2017, 15:36
2 ответа

Мой первый совет - смените оболочку на что-нибудь другое. Тем не менее, это должно делать то, что вы хотите:

set file = "V_181_V_d_2_um_phi_4.50_eV_tOn_0.5_ns/SteadyState_out.e"
set newname = "`echo $file | cut -d "/" -f1`.e"
mv "$file" "$newname"

Это не сохранит файл в его исходном каталоге. Я не знаю, хотите ли вы этого, поскольку вы фактически не объяснили, чего вы пытаетесь достичь, но если вы хотите, чтобы файл оставался в исходном каталоге, вы можете сделать:

set dirname = "V_181_V_d_2_um_phi_4.50_eV_tOn_0.5_ns"
set file = "SteadyState_out.e"
set newname = "`echo $dirname | cut -d "/" -f1`.e"
mv "$dirname"/"$file" "$dirname"/"$newname"
1
27.01.2020, 23:34

csh tcsh и zsh ) имеют : h , : t модификаторы для извлечения заголовка (имя каталога) или хвоста (базовое имя) файла.

Итак, вы можете сделать:

 set x = V_181_V_d_2_um_phi_4.50_eV_tOn_0.5_ns/SteadyState_out.e
 mv -- $x:q $x:h/$x:h:t:q
1
27.01.2020, 23:34

Теги

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