AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-556743

jsx97's questions

Martin Hope
jsx97
Asked: 2025-04-15 04:03:18 +0800 CST

为什么我的 UTF-8 文件名总是与 Perl 中的正则表达式括号表达式匹配?

  • 9

这是一个脚本,用于修复文件从 Windows 移动到 Mac 时损坏的西里尔文文件名(基于对使用不同编码后文件名被乱码后的恢复文件名的回答)

#!/bin/zsh

# Usage: <script> <target directory>
# Requires Perl::Rename

find "$1" -mindepth 1 -print0 |
  rename -0 -d -e '
    use Unicode::Normalize qw(NFC);
    use Encode qw(:all);

    if ($_ =~ /[†°Ґ£§•¶І®©™Ђђ≠]/) {
      my $check = DIE_ON_ERR | LEAVE_SRC;
      my $new = eval {encode("UTF-8",
                      decode("cp866",
                      encode("mac-cyrillic",
                      NFC(decode("UTF-8", $_, $check)), $check), $check))
                     };
      if ($new) {$_ = $new;} else {warn $@;}
    }'

我希望它仅重命名目标目录中文件名中至少包含以下字符之一的文件:†°Ґ£§•¶І®©™Ђђ≠。但由于某种原因,脚本会重命名那里的所有文件:例如,正确的文件名срочно.txt更改为无意义的ёЁюўэю.txt。我做错了什么?

我的测试文件夹的路径很简单/Users/john/scripts/test:没有空格,也没有西里尔字母或特殊字符。

该脚本在 macOS 和 BSD 版本上使用find。

问题得到解答两天后的更新:Stéphane 的 Chazelas 和 Choroba 的版本对我来说很好用。Terdon 的版本对我来说还不行。

perl
  • 4 个回答
  • 1238 Views
Martin Hope
jsx97
Asked: 2025-04-07 23:19:50 +0800 CST

隐藏“欢迎使用 nano”消息

  • 5

这可能是一个非常愚蠢的问题,但我确实尝试过,但没有自己弄明白。

GNU nano 8.4。当我启动它时,出现了一条欢迎消息:

欢迎使用 nano。如需基本帮助,请按 Ctrl+G。

如何永久隐藏它?我尝试使用 启动 nano nano -x,但这会隐藏整个工具栏,而我只想隐藏欢迎消息。

nano
  • 2 个回答
  • 50 Views
Martin Hope
jsx97
Asked: 2025-03-31 00:27:31 +0800 CST

$0 和 $0:P 之间的实际差异

  • 3

当我在 zsh 中运行以下脚本时,和都$0给出$0:P相同的输出:/Users/john/scripts/test123.sh。

#!/bin/zsh
echo script\'s path:         $0
echo absolute path:          $0:P
echo parent folder:          $0:h
echo filename:               $0:t
echo filename w/o extension: $0:t:r
echo extension:              $0:t:e

但为什么会这样?是不是因为:P强制使用绝对路径(根据 zsh 文档),如果:P不使用,路径应该是相对的,例如~/scripts/test123.sh?

要运行该脚本,我首先要使其可执行:chmod a+rx test123.sh然后双击它或使用命令行。操作系统是 macOS。

zsh
  • 1 个回答
  • 49 Views
Martin Hope
jsx97
Asked: 2025-03-23 21:17:01 +0800 CST

文件已更改,但其“修改日期”相同。这是怎么回事?

  • 10

这是一个测试文件test.applescript:

display dialog "foo" buttons {"OK"} cancel button 1 default button 1

下午 4:05 我将其编译为test.app:

osacompile -o test.app test.applescript

下午 4:07,我test.applescript通过将 替换foo为进行编辑bar,然后再次编译它,覆盖现有test.app文件。(它已成功覆盖。如果我运行它,对话框会显示“bar”,而不是“foo”。)

display dialog "bar" buttons {"OK"} cancel button 1 default button 1
osacompile -o test.app test.applescript

但尽管如此,date modified的值test.app仍然是下午 4:05。这是为什么?这怎么可能呢?

输出stat -x:

  File: "test.app"
  Size: 96           FileType: Directory
  Mode: (0755/drwxr-xr-x)         Uid: (  501/    john)  Gid: (   20/   staff)
Device: 1,17   Inode: 79429067    Links: 3
Access: Sun Mar 23 16:05:52 2025
Modify: Sun Mar 23 16:05:52 2025
Change: Sun Mar 23 17:20:48 2025
 Birth: Sun Mar 23 16:05:52 2025
macos
  • 1 个回答
  • 1263 Views
Martin Hope
jsx97
Asked: 2025-03-20 22:59:54 +0800 CST

在哪里存储来自 config.fish 的包含缩写语句的文件?

  • 4

我已经从 zsh 启动了 fish。在我的config.fish里面有一行

source ~/.config/fish/easy-tor.fish

easy-tor.fish只是一堆abbr用于快速打开或关闭命令行 Tor 和 SOCKS5 代理的语句。

将此文件的正确位置是什么?fish 是否提供了有关将不包含函数的文件存储在哪里的官方建议?

macos
  • 1 个回答
  • 22 Views
Martin Hope
jsx97
Asked: 2025-03-17 01:11:30 +0800 CST

使脚本可执行:chmod +x vs. a+x vs. a+rx

  • 5

为了使 shell 脚本可执行,似乎有三种选择:

  • 选项 1:chmod +x script.sh
  • 选项 2:chmod a+x script.sh
  • 选项 3:chmod a+rx script.sh

这里有两个问题。

Q1. 第一个和第二个选项授予执行权限,但不授予读取权限,这到底是什么意思?在现实生活中怎么可能呢?

Q2. 对于一般情况,以下哪个选项是推荐的?或者,为了让这个问题不那么个人化,每个选项的优缺点是什么?

permissions
  • 2 个回答
  • 52 Views
Martin Hope
jsx97
Asked: 2025-03-16 21:02:55 +0800 CST

zsh 配置文件中的变量

  • 4

假设您的 zsh 配置包含以下 Perl 行:

PATH="/path/to/your/home/perl5/bin${PATH:+:${PATH}}"; export PATH;
PERL5LIB="/path/to/your/home/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;
PERL_LOCAL_LIB_ROOT="/path/to/your/home/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT="--install_base \"/path/to/your/home/perl5\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=/path/to/your/home/perl5"; export PERL_MM_OPT;

zsh 配置文件不是脚本,所以如果我理解正确的话,不可能在那里使用常规的 bash 样式变量。

但也许仍然有可能以某种方式为该/path/to/your/home/perl5/部分设置一个变量,以便更容易地更改所有五条线?

zsh
  • 1 个回答
  • 35 Views
Martin Hope
jsx97
Asked: 2025-03-16 08:53:41 +0800 CST

Perl:模块已安装但不起作用

  • 5

我记得我已经使用 安装了 Perl::Rename,cpan -i File::Rename并且事实上我在那里有$HOME/perl5/bin和rename可执行unsafe-rename文件。

但当我尝试使用时rename,

# Expected: Renames FooBar.txt to Foo_Bar.txt
# It worked for me in the past
rename 's/\s/_/' *.txt

...有一个错误:

Can't locate File/Rename.pm in @INC (you may need to install the File::Rename module) (@INC contains: /Library/Perl/5.34/darwin-thread-multi-2level /Library/Perl/5.34 /Network/Library/Perl/5.34/darwin-thread-multi-2level /Network/Library/Perl/5.34 /Library/Perl/Updates/5.34.1 /System/Library/Perl/5.34/darwin-thread-multi-2level /System/Library/Perl/5.34 /System/Library/Perl/Extras/5.34/darwin-thread-multi-2level /System/Library/Perl/Extras/5.34) at ./rename line 4.
BEGIN failed--compilation aborted at ./rename line 4.

然后我尝试File::Rename使用相同的命令重新安装,但又出现了另一条错误消息,非常长。以下是最后的一部分:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ERROR: Can't create '/Library/Perl/5.34/File'
mkdir /Library/Perl/5.34/File: Permission denied at /System/Library/Perl/5.34/ExtUtils/Install.pm line 470.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 at -e line 1.
make: *** [pure_site_install] Error 13
  RMBARKER/File-Rename-2.02.tar.gz
  /usr/bin/make install  -- NOT OK

这里发生什么事了?

Perl 本身是 macOS 附带的。我没有安装它。

perl
  • 1 个回答
  • 51 Views
Martin Hope
jsx97
Asked: 2025-03-14 23:58:59 +0800 CST

使用不同的编码将文件名弄乱后恢复

  • 11

我有一个文件

СМП бваг™вга†

前三个字母是正确的西尔字母,其余部分是莫吉巴克字母。

“ Mojibake是使用非预期的字符编码对文本进行解码而产生的乱码或胡言乱语的文本。” — 维基百科

最初是

СМП структура

但后来不知怎么的就变成了乱码,很可能是因为该文件是由一个不熟练的用户在 Windows XP 上压缩的,然后在 Mac 上解压的。

convmv我尝试使用和修复它iconv,如下所示:

convmv -r -f cp1251 -t utf-8 DIR
ls | iconv -f cp1251 -t cp850 | iconv -f cp866

但尚未成功。有人能帮忙吗?

更新 1

十六进制转储СМП бваг™вга†:

0000000    d0  a1  d0  9c  d0  9f  20  d0  b1  d0  b2  d0  b0  d0  b3  e2
           С   **  М   **  П   **      б   **  в  **   а  **   г   **  ™
0000020    84  a2  d0  b2  d0  b3  d0  b0  e2  80  a0  0a                
           **  **  в  **   г  **   а   **  †   **  **  \n                
0000034

十六进制转储СМП структура:

0000000    d0  a1  d0  9c  d0  9f  20  d1  81  d1  82  d1  80  d1  83  d0
           С   **  М   **  П   **      с  **   т  **   р  **   у  **   к
0000020    ba  d1  82  d1  83  d1  80  d0  b0  0a                        
           **  т   **  у   **  р   **  а   **  \n                        
0000032
filenames
  • 1 个回答
  • 264 Views
Martin Hope
jsx97
Asked: 2025-03-12 15:56:54 +0800 CST

点文件是否需要首字母点?

  • 5

“点文件”和“配置文件”之间有区别吗?

例如,我torrc在 中有一个文件/opt/homebrew/etc/tor。文件名本身及其父目录都不以点开头。尽管如此,这个文件.vimrc与 Vim 的文件相同。称其为点文件是否正确?

configuration
  • 2 个回答
  • 81 Views
Martin Hope
jsx97
Asked: 2025-03-11 02:01:53 +0800 CST

macOS 上的 bash shebang

  • 7

在 macOS 上,#!/bin/bash意味着脚本将使用系统 bash,它非常过时(3.2,2006 年)并且(至少对我自己而言)几乎没用。

然后,您可以使用 Homebrew 或 MacPorts 安装现代 bash,并使用如下命令:

#!/usr/bin/env bash

但这种env方法并不可靠:如果你在只安装了系统 bash 的 Mac 上运行此脚本会怎么样?那么,env将改用 bash 3.2(我想……),这将导致脚本行为异常,从而造成危害。

那么第三种方法是

#!/opt/homebrew/bin/bash

但是,如果你在使用 MacPorts 而不是 Homebrew 安装了现代 bash 的 Mac 上运行此脚本,会怎么样?

这里的最佳做法是什么?(也许创建一个/usr/local/bin指向的符号链接/opt/homebrew/bin/bash,然后#!/usr/local/bin?)

bash
  • 2 个回答
  • 955 Views
Martin Hope
jsx97
Asked: 2025-03-07 03:00:19 +0800 CST

‘which’ 与 ‘type -a’

  • 7

一位高级开发人员在 2022 年写了一篇文章,他的 zsh 配置中有以下别名:

alias which='type -a'

但是 zshwhich默认有,如果我们which像这样使用which cp,输出将是

/bin/cp

而输出type -a cp是

cp is /bin/cp

差异太细微,无法创建别名。那么我可能忽略了哪些实际差异呢?

zsh
  • 1 个回答
  • 150 Views
Martin Hope
jsx97
Asked: 2025-03-05 21:20:18 +0800 CST

从 $PATH 中删除某些路径

  • 6

要在 fish 中的 $PATH 添加一些内容,我使用

fish_add_path -a ~/foo/bar

然后鱼添加~/foo/bar到我的~/.config/fish/fish_variables:

SETUVAR fish_user_paths:/Users/john/foo/bar

/Users/john/foo/bar那么,要从$PATH 中删除,我有两个选择,这样说正确吗:

  • 编辑fish_variables文件

  • 使用以下函数:

    // https://github.com/fish-shell/fish-shell/issues/8604#issuecomment-1169638533
    function remove_path
      if set -l index (contains -i "$argv" $fish_user_paths)
        set -e fish_user_paths[$index]
        echo "Removed $argv from the path"
      end
    end
    

问题的第二部分是:如何正确使用该函数?我将其保存为remove_from_path.fish,并执行为remove_from_path.fish "/Users/john/foo/bar",但它似乎没有/Users/john/foo/bar从 $PATH 中删除。我做错了什么?

macos
  • 1 个回答
  • 42 Views
Martin Hope
jsx97
Asked: 2025-03-05 15:58:48 +0800 CST

“set -g” 与 fish shell 上的“set”有何不同?

  • 7

我试图了解该set命令在 fish shell 上是如何工作的。

例如,要删除问候消息,鱼手册建议:

要清空文本,使用默认的问候语功能:

set -U fish_greeting

或者set -g fish_greeting在 config.fish 中。

但为什么建议使用set -g fish_greetinginconfig.fish而不是 just set fish_greeting?这里的实际目的是什么-g?

fish
  • 1 个回答
  • 279 Views
Martin Hope
jsx97
Asked: 2025-03-02 03:11:52 +0800 CST

zsh 别名在 fish 中使用时会导致错误

  • 4

我的 zsh 中有以下别名:

alias -- -='cd -'
alias ..='cd ..'
alias ...='cd ../..'

当我通过手动输入并按回车键切换到 fish 时fish,第一个别名会导致错误:

- (line 1): function: -: invalid function name
function -  --description 'alias -=cd -';  cd - $argv

如何解决这个问题?

zsh
  • 1 个回答
  • 36 Views
Martin Hope
jsx97
Asked: 2025-03-01 04:57:24 +0800 CST

当 shell 退出时:关闭窗口 vs. 不关闭窗口

  • 4

终端>设置>配置文件> Shell >当 shell 退出时,选项:

  • 关闭窗口
  • 如果 shell 明确退出则关闭
  • 不要关上窗户

在此处输入图片描述

我的问题: “不关闭窗口”选项的实际用途是什么?(顺便说一下,这是默认选择。)

下面有一个测试来说明为什么我认为不关闭窗口是无用的;但是,当然,我在这里可能是错的:

  1. 打开终端。您的 shell 是 zsh。
  2. 输入bash,按回车键。现在你的 shell 是 bash。
  3. 输入exit。现在你的 shell 是 zsh。
  4. 输入exit。然后:
    • 如果你选择不关闭窗口,你就会得到一个无用的窗口,你可以用它做任何事情。很奇怪。
    • 如果你关闭了窗口或者在 shell 明确退出时关闭,这个没用的窗口就会自动关闭。很好。
terminal
  • 1 个回答
  • 30 Views
Martin Hope
jsx97
Asked: 2024-12-20 19:34:19 +0800 CST

递归删除空文件,然后删除空目录

  • 5

以下脚本非递归地删除常规空文件(不包括点文件),然后非递归地删除空目录(不包括点文件),并忽略.DS_Store文件的存在(也就是说,如果目录只包含一个.DS_Store文件,那么该目录仍然会被删除)。

rm -f -- *(.L0)

setopt extended_glob
has_files_other_than_DS_Store() [[ -n $REPLY/^(#i).ds_store(#qNDY1) ]]
remove_empty_macos_dirs() {
  local dir ret=0
  for dir do
    rm -f -- $dir/.(#i)ds_store(N.) && rmdir -- $dir || ret=$?
  done
  return $ret
}
remove_empty_macos_dirs *(/^+has_files_other_than_DS_Store)

有人能演示如何使其递归工作吗?也就是说,第一步是递归删除所有空的常规文件。然后递归删除空目录。

我会自己尝试,但说实话,我只是害怕尝试这个rm命令。

zsh
  • 1 个回答
  • 47 Views
Martin Hope
jsx97
Asked: 2024-12-19 02:18:51 +0800 CST

继承路径修改与继承别名

  • 5

我的登录 shell 是 zsh。我在文件中添加了以下两行.zprofile:

path+=$HOME/foobar123
alias foo='echo bar'

bash然后,如果我通过键入或fish并按回车键切换到 bash 或 fish ,echo $PATH将继续显示该foobar123部分,但foo别名不起作用。

这是为什么?为什么别名和路径修改的处理方式不同?

zsh
  • 1 个回答
  • 37 Views
Martin Hope
jsx97
Asked: 2024-12-17 16:34:40 +0800 CST

查找并删除空文件:“-size 0”与“-empty”

  • 5

为了查找并删除空文件,我发现了以下 Stack Overflow 问题:

https://stackoverflow.com/q/3157343

那里大约有 10 个答案,但所有答案都使用-size 0而不是-empty。

例如,+153 答案:

find . -name 'file*' -size 0 -print0 | xargs -0 rm

另一个答案,+100:

find -name 'file*' -size 0 -delete

为什么?换句话说,-size 0相比而言,有哪些优势-empty?

对于 macOS,我个人的解决方案是

find . -mindepth 1 -maxdepth 1 -type f -empty -print -delete
find
  • 1 个回答
  • 48 Views
Martin Hope
jsx97
Asked: 2024-12-16 19:22:52 +0800 CST

我的“.zshrc”最底部有“exec fish”——可以绕过它吗?

  • 8

我大多数时候更喜欢在 macOS 上使用 fish shell,但不要将其用作登录 shell,因为我认为有时它可能会导致问题。

exec fish因此,我只需在 的最底部添加.zshrc,就完成了。这意味着我的登录 shell 仍然是 zsh,我的$PATH修改仍然在 中.zprofile,但是当我打开终端时,我不必手动切换到 fish。对我来说很完美。

但是,如果我出于某些特定原因仍然想从 fish 切换到 zsh 怎么办? 有可能吗?(因为如果我简单地输入zsh并按回车键,我当然会立即切换回 fish。)

更新:有一个解决方法zsh -c,但它只适用于某些命令。

zsh
  • 2 个回答
  • 466 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve