假设我有一个包含 10K 文本文件的文件夹。我想从每个文件中删除每个空格、 制表符和换行符。
我怎样才能有效地做到这一点?
我不断收到此错误:
./install.sh
./install.sh: line 28: syntax error near unexpected token `do'
./install.sh: line 28: ` do'
Run Code Online (Sandbox Code Playgroud)
运行此代码时(正在进行中):
# Set the prompt string:
PS3='Choose folder: ';
function choose() {
# This works:
#select folder;
#do test -n "$folder" && echo You chose: $REPLY\) $folder && break;
#echo 'Wrong entry, try again.';
#continue;
#done;
select folder;
do
case $folder in
'q')
echo 'Exiting …';
break;
;;
*)
do
test -n '$folder' && echo You chose: $REPLY\) $folder && break;
echo 'Wrong entry, …Run Code Online (Sandbox Code Playgroud) 我对我的 mac 做了以下操作,目的是复制/etc进去 /tmp尝试一些东西:
$cd /tmp
$cp -a /etc .
$cd etc
-bash: cd: etc: No such file or directory
$ls -all etc
lrwxr-xr-x@ 1 jim jim 11 Dec 18 17:44 etc -> private/etc
Run Code Online (Sandbox Code Playgroud)
发生了什么?我不明白。这是什么etc -> private/etc,为什么etc不是 中的目录/tmp?
find以/etc明显的方式调用时无法列出目录的内容,我不确定解释是什么。
find /etc只是显示/etc,即使目录中有其他文件。
$ find /etc
/etc
Run Code Online (Sandbox Code Playgroud)
还
$ find /./etc
/./etc
Run Code Online (Sandbox Code Playgroud)
并作为根
$ sudo find /etc
/etc
Run Code Online (Sandbox Code Playgroud)
但是,/etc运行时可以看到里面的一些文件find /etc/.
$ find /etc/. | head
find: /etc/./cups/certs: Permission denied
/etc/.
/etc/./afpovertcp.cfg
/etc/./afpovertcp.cfg~orig
/etc/./aliases
Run Code Online (Sandbox Code Playgroud)
其他命令,例如ls显示/etc...的内容
$ ls -1 /etc | head
afpovertcp.cfg
afpovertcp.cfg~orig
aliases
aliases.db
Run Code Online (Sandbox Code Playgroud)
这是预期的行为find吗?
alias xxx=echo && xxx ok不起作用,因为别名在之后不可用&&。但一行代码最适合我的任务。
如何定义别名并在 bash 的同一行中使用?
我使用 OS X 并有几个从不同的外部硬盘生成的校验和文件。
如果校验和文件与要检查的文件位于同一位置,那么我可以简单地运行,例如:
shasum -c sums.sha1
Run Code Online (Sandbox Code Playgroud)
但就我而言sums.sha1,位于~/Desktop/sums.sha1并且要验证的文件位于/Volumes/fr-ubb-1(外部驱动器,只读)。
我知道不可能将位置参数传递给shasum. 使用不同位置的文件运行校验和文件验证的最佳做法是什么?
我承认我不是 unix 命令的专家,但我将一个文件移动到另一个目录并收到一条错误消息 - 但该文件已被移动。为什么会mv: rename to to /Users/billtubbs/Library/Script Libraries/to: No such file or directory引发此消息“ ”?是不是因为 Library 是一个受保护的文件夹而我应该使用sudo ...?
这是在 Mac OS X 10.13.4 上的终端中:
BillsMacBookPro:Scripts billtubbs$ ls ~/Library/'Script Libraries'
BillsMacBookPro:Scripts billtubbs$ mv FileHandlers.scpt to ~/Library/'Script Libraries'
mv: rename to to /Users/billtubbs/Library/Script Libraries/to: No such file or directory
BillsMacBookPro:Scripts billtubbs$ ls
Address Book Scripts Terminal scripts
Applications Test Script read html page .scpt
Bus Data Test script parse html form.scpt
Firefox scripts TextDataFromFile.scpt
ListHandlers.scpt TextHandlers.scpt
Mail …Run Code Online (Sandbox Code Playgroud) 我发现一个文件通过以下方式bash_profile使用了该语句:export -f
# Run xelatex and BibTeX
function xelatex_bibtex {
xelatex -shell-escape "${1}.tex" &&
bibtex "${1}" &&
xelatex -shell-escape "${1}.tex" &&
xelatex -shell-escape "${1}.tex"
}
export -f xelatex_bibtex
Run Code Online (Sandbox Code Playgroud)
然而,没有定义的函数export -f似乎工作得很好:
# Search for synonyms
function syn {
wn "${1}" -synsn
}
Run Code Online (Sandbox Code Playgroud)
在使用方面创建便利功能时,什么是作用export -f以及什么被认为是良好实践?bash_profileexport
我想弄清楚为什么 zsh 的提示看起来像这样:
(以文本形式):
\[\]\u\[\] at \[\]\h\[\] in \[\]\w\[\]$(__git_ps1) \[\]$(git_diff)\n\[\]($(date +'1:MikesMBP.local ')) \[\]$\[\]
Run Code Online (Sandbox Code Playgroud)
我希望它在调用 zsh 之前像在 bash 中一样正常列出我的密码和用户名。这是我的 .zshrc:
# Lines configured by zsh-newuser-install
HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
setopt appendhistory autocd beep extendedglob nomatch notify
bindkey -v
# End of lines configured by zsh-newuser-install
# The following lines were added by compinstall
zstyle :compinstall filename '/Users/mike/.zshrc'
autoload -Uz compinit
compinit
# End of lines added by compinstall
Run Code Online (Sandbox Code Playgroud)
这只是第一次启动 zsh 时创建的标准配置。我已经尝试了内置的 OS X zsh 和自制软件的 zsh,它们产生了相同的错误。你看到会导致这种情况的东西吗?
我试图添加JAVA_HOME路径变量。
我下载了 Java JDK 并完成了以下操作:
nano ~/.bash_profile添加了以下几行并保存了文件:
export JAVA_HOME=$(/usr/libexec/java_home)
export PATH=$JAVA_HOME/bin=$PATH
Run Code Online (Sandbox Code Playgroud)source ~/.bash_profile
之后,我尝试使用以下命令再次打开 bash 文件:
nano ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)
表明:
-bash: nano: command not found
Run Code Online (Sandbox Code Playgroud)
我尝试过其他的命令太多,如brew doctor,curl,vim,java -version等。所有这些节目不能找到命令。
解决这个问题的方法是什么?如何恢复我的系统?
更新:我使用的解决方案:
我运行以下命令来设置 Mac OS 在命令行中使用的标准默认路径:
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
Run Code Online (Sandbox Code Playgroud) 我正在尝试在恢复模式期间在 Mac 上使用 bash 脚本移动一些文件。启动进入恢复后,我可以通过在终端中手动输入命令来成功移动文件。然而,一个目标是记录该过程并使其可移植,因此需要一个脚本。当我尝试mv从脚本运行命令时,出现错误No such file or directory。当我手动输入文件路径时,我已经确认该命令可以正确执行,但脚本继续出错。
我曾尝试使用双引号 ( ") 和美元符号 ( $)、美元符号 ( $) 和大括号 ( {}) 以及其他一些用于变量评估的组合。它们都因相同的错误而失败。我还尝试在 src 上使用尾部斜杠,在 src 上使用通配符 ( *),并在 src 和 dest 上使用尾部斜杠。我完全被难住了。这可能是特定于 MacOS 恢复模式的,但是既然提示宣布-bash-3.2,这肯定是 bash 3.2 shell?
请帮助 - 甚至我们的高级开发人员都被这个问题难住了......
这与不正确的解析有关吗?我注意到/*目的地的末尾有一个,我没有指定......
脚本是:
#! /bin/bash
#_# Setup
echo 'Setting up variables'
SYSDIR='/Volumes/Macintosh\ HD/System'
EXTDIR='Library/Extensions'
USERDIR='/Volumes/Macintosh\ HD/Users/admin'
#_# Bluetooth
echo 'Mitigating Bluetooth'
BLUE='IOBluetoothFamily.kext'
mkdir -p "$USERDIR/delete_me/$BLUE"
mv "$SYSDIR/$EXTDIR/$BLUE"/* "$USERDIR/delete_me/$BLUE"
echo …Run Code Online (Sandbox Code Playgroud) 我在 Ubuntu 中有一个小脚本,我想在 Mac 上使用。该date功能是不一样的,所以它没有语法上
这是原始的 Ubuntu BASH 脚本;
function pass () {
pass="$(ldapsearch -Y GSSAPI -Q -H ldap:///dc%3Dant%2Cdc%3Damazon%2Cdc%3Dcom -b DC=ant,DC=amazon,DC=com -s sub cn=$1 | grep -Ew 'pwdLastSet:' | awk '{print $2}')"
pass_epoch="$(((pass / 10000000) - 11644473600))"
pass_epoch_exp="$((pass_epoch + 86400*90))"
today="$(date +%s)"
countdown_epoch="$(expr $pass_epoch_exp - $today)"
countdown="$((countdown_epoch / 86400))"
pwdSet_date="$(date -d @$pass_epoch)"
expires_date=$(date -d "@$((pass_epoch + 86400*90))")
echo "pwdLastSet: "$pwdSet_date
echo "pwdExpires: "$expires_date
echo " daysLeft: "$countdown
}
usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] …Run Code Online (Sandbox Code Playgroud) 我有一个文件test.xml(如下所示)。这个grep有效:
grep '<appointment-id internal:ref=1.2.3/>' test.xml
Run Code Online (Sandbox Code Playgroud)
输出是:
<appointment-id internal:ref=1.2.3/>
Run Code Online (Sandbox Code Playgroud)
但这失败了:
grep "$(grep '<appointment-id internal:ref=1.2.3/>' test.xml)" test.xml
Run Code Online (Sandbox Code Playgroud)
输出是:
grep: invalid character range
Run Code Online (Sandbox Code Playgroud)
内容test.xml:
<note>
<to>Jim</to>
<from>John</from>
<heading>Reminder</heading>
<body>Some text</body>
<appointment-id internal:ref=1.2.3/>
</note>
Run Code Online (Sandbox Code Playgroud)
我已将两个grep命令(简单命令和嵌套命令)放入带有set -x. 这是该脚本的精确副本?&?粘贴:
set -x
grep '<appointment-id internal:ref=1.2.3/>' test.xml
grep "$(grep '<appointment-id internal:ref=1.2.3/>' test.xml)" test.xml
exit 0
Run Code Online (Sandbox Code Playgroud)
这是它的输出:
++ grep '<appointment-id internal:ref=1.2.3/>' test.xml
<appointment-id internal:ref=1.2.3/>
+++ grep '<appointment-id internal:ref=1.2.3/>' test.xml
++ grep ' <appointment-id internal:ref=1.2.3/>' test.xml
grep: invalid character range
++ exit …Run Code Online (Sandbox Code Playgroud)