一旦我登录bash shell,我就会收到这个不寻常且烦人的错误:
sh: PATHRE: line 4: syntax error near unexpected token `('
sh: PATHRE: line 4: ` echo c:\Users\Chris Ross\bin;.;C:\RailsInstaller\Git\local\bin;C:\RailsInstaller\Git\mingw\bin;C:\RailsInstaller\Git\bin;c:\ImageMagick-6.9.2-Q16;c:\Python27\;c:\Python27\Scripts;c:\Program Files (x86)\Intel\iCLS Client\;c:\Program Files\Intel\iCLS Client\;c:\WINDOWS\system32;c:\WINDOWS;c:\WINDOWS\System32\Wbem;c:\WINDOWS\System32\WindowsPowerShell\v1.0\;c:\Program Files\Intel\Intel(R) Management Engine Components\DAL;c:\Program Files\Intel\Intel(R) Management Engine Components\IPT;c:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;c:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;c:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;c:\Program Files\Intel\WiFi\bin\;c:\Program Files\Common Files\Intel\WirelessCommon\;c:\Program Files (x86)\PDFtk Server\bin\;c:\RailsInstaller\Ruby1.9.3\bin\;c:\Program Files (x86)\Shoes;c:\Program Files (x86)\QuickTime\QTSystem\;c:\xampp\apache\bin;c:\xampp\php;c:\xampp\mysql\bin\;c:\Program Files\nodejs\;c:\Users\Chris Ross\AppData\Roaming\npm;c:\Program Files\Sublime Text 3\;c:\utils\ffmpeg\bin;c:\Program Files (x86)\GnuWin32\bin\;c:\utils;c:\Python27\;c:\Python27\Scripts;c:\Program Files\ImageMagick-6.9.2-Q16;c:\Program Files (x86)\PDFtk Server\bin;c:\RailsInstaller\Ruby1.9.3\bin;c:\utils\wget-1.11.4-1-bin\bin;c:\utils\iview441_x64;c:\Program Files\Tracker Software\PDF Editor\;c:\Program Files\processing-2.2.1;c:\Program Files\Audacity;c:\utils\Calibre Portable\Calibre;c:\Users\Chris Ross\dotfiles\bin | tr ':' '\n' | while read x; do'
sh: error importing function definition for `PATHRE'
Chris Ross@MACHINE ~
这仅影响以下函数,尽管函数本身按预期工作且没有错误:
pathre ()
{
local idx=0;
local regex='.*';
[[ ! -z "${1}" ]] && regex="${1}";
echo "${PATH}" | tr ':' '\n' | while read -r x; do
(( idx+=1 ));
echo "${idx} ${x}";
done | grep -i "${regex}"
}
无论是位于~/.bashrc
来源的文件还是位于~/.bashrc
的文件中,都会发生错误。
该函数简单地将路径分隔符替换为新行以迭代,然后grep查找子字符串。它看起来像这样:
$ pathre
1 /c/Users/Chris Ross/bin
2 .
3 /usr/local/bin
[etc...]
并使用args:
$ pathre dot
51 /c/Users/Chris Ross/dotfiles/bin
67 /c/Users/Chris Ross/dotfiles/bin
我在Windows 10计算机上的Console2中使用Git Bash,我使用RailsInstaller软件包安装了它。
$ bash --version
GNU bash, version 3.1.20(4)-release (i686-pc-msys)
Copyright (C) 2005 Free Software Foundation, Inc.
感谢。
答案 0 :(得分:0)
您确定导致问题的确切代码是什么?因为它看起来不像。
对于初学者,错误显示为PATHRE
,您的代码使用pathre
。
其次,错误中的代码表示路径在正在运行的命令上展开(实际上,很可能实际正在运行的命令)并且路径的值是问题。
因此我希望您的代码看起来更像这样:
PATHRE ()
{
local idx=0;
local regex='.*';
[[ ! -z "${1}" ]] && regex="${1}";
${PATH} | tr ':' '\n' | while read -r x; do
(( idx+=1 ));
echo "${idx} ${x}";
done | grep -i "${regex}"
}
如果是这种情况,那么您可以通过实际使用代码段中的代码和/或找到PATHRE
代码并删除它来解决问题(因为它可能在某个地方,你只是没有看到它。
那说这恰好是一个写得很差的功能。
这个awk
- 使用功能要好得多。
pathre() {
awk -v RS=: -v re="$1" '!re || $0 ~ re {print NR,$0}' <<<"$PATH"
}