我是bash脚本编写方面的新手。我有一个名为dir.txt
的文件,用于存储以下文本:
./src/defaultPackage
如何阅读dir.txt
并单行切换到目录./src/defaultPackage
?
我尝试了cat ./dir.txt | xargs cd
,但是cd
抛出了no such file or directory
错误
我是bash脚本编写方面的新手。我有一个名为dir.txt
的文件,用于存储以下文本:
./src/defaultPackage
如何阅读dir.txt
并单行切换到目录./src/defaultPackage
?
我尝试了cat ./dir.txt | xargs cd
,但是cd
抛出了no such file or directory
错误
你可以做
cd "$(head -1 dir.txt)"
有关说明,请先阅读GNU bash手册,然后阅读head(1)。在某些情况下(例如,如果dir.txt
包含注释),您可能希望使用gawk(1)而不是head
。
请注意,xargs(1)无法与任何bash-builtins(7)(包括cd
)一起使用; xargs
需要一个executable文件(或脚本),因为它使用了exec(3)函数。参见execve(2)和elf(5)。
您可能需要阅读Advanced Linux Programming和syscalls(2),然后研究GNU bash的源代码,即free software。您可能会对使用strace(1)或ltrace(1)或gdb(1)来了解程序或processes(包括您的Unix shell)的行为感兴趣。
当然,请避免在文件或目录名称中使用奇怪的字符,例如换行符,制表符或空格。参见path_resolution(7)和glob(7)。
您可以考虑将GNU guile(请参阅this和SICP)或Python用于脚本。两者比bash
甚至zsh或fish更具可读性(我认为更容易写)。当然,请在脚本上使用distributed version control系统(例如git或mercurial)。
您可能对Linux From Scratch感兴趣。
,仅使用内置函数:
##[warning]No .MSI files were found,please check your build-configuration. If this is expected,you might consider to use the default Visual Studio Build task instead of this custom Installer task.
2018-11-28T22:58:54.1434410Z ##[section]Finishing: Create .msi file(s) from VS Installer project(s).
要从文件中读取一行,请使用IFS= read -r line < dir.txt
cd -- "$line"
(而不要使用read
/ head
/ cat
/任何东西)。
出现错误的原因是sed
是内置函数,而不是cd
中的命令:PATH
不能用作外部命令,它会更改外壳的内部状态。
请注意,如果该行为空,则将cd
至cd
。为避免这种情况:
$HOME