Это стандартная ошибка, которая не перенаправляется (, когда ваша ссылка не работает )! Это решит вашу проблему, потому что стандартная ошибка перенаправляется на стандартный вывод.
output=$(timeout --signal=9 3 telnet 1.2.3.4 1234 2>&1 | grep "something")
Это может быть базовый вопрос, но я не нашел существующего вопроса/ответа на него. Простое решение, которое я сделал, было функцией в~./bash_functions
**:
#/home/user/.bash_functions
function mv-rn() {
mv $1 $(dirname $1)/${2}
}
Так что теперь:
$ mv-rn /a/long/path/to/a/file.txt file.txt.bak
$ ls /a/long/path/to/a/file.txt.bak
a/long/path/to/a/file.txt.bak
(**обратите внимание, что это должно быть в вашем ~/.bashrc, чтобы указанная выше функция распознавалась как псевдоним):
# Function definitions.
if [ -f ~/.bash_functions ]; then
. ~/.bash_functions
fi
Использовать расширение раскоса:
mv /a/long/path/to/a/file.txt{,.bak}
Это переименовывает /a/long/path/to/a/file.txt
с пустым суффиксом в /a/long/path/to/a/file.txt
с суффиксом .bak
.
Хотя я бы, вероятно, использовал раскрытие скобок, как показано в ответе Фредди , и в bash
, и в zsh
можно было бы использовать интерактивное раскрытие истории с обозначением #$
для ссылки на последнее набранное слово в текущей строке:
mv /a/long/path/to/a/file.txt !#$.bak
(cd /a/long/path/to/a && mv file.txt file.txt.bak)
&&
гарантирует, что mv будет выполняться только в случае успешного выполнения cd. Круглые скобки означают, что команды будут выполняться в подоболочке, поэтому cd не изменит рабочий каталог вашей существующей оболочки.