スクリプト内でコマンドを使用して、スクリプト自体のリテラルテキスト内容を印刷しようとしています。
を試してみましたが、うまくcat $(pwd)/$(basename "$0")
いきません。何をすべきかを知っている人はいますか?
答え1
このコマンドを分析してみましょう。
cat $(pwd)/$(basename "$0")
$(pwd)
現在のディレクトリに展開されます。$(basename "$0")
実行中のスクリプトのファイル名に展開されます。- (また、空白などのあるパスでは失敗するので、実際に引用しなければなりません。)
したがって、同じディレクトリでスクリプトを実行すると、これが機能します。
$ cd /tmp
$ cat test.sh
#!/bin/bash
cat $(pwd)/$(basename "$0")
$ ./test.sh
#!/bin/bash
cat $(pwd)/$(basename "$0")
しかし、現在のディレクトリいいえスクリプトがあるディレクトリにある場合、コマンドは失敗します。
$ cd /home
$ /tmp/test.sh
cat: /home/test.sh: No such file or directory
pwd
コマンドが探しているものを見ることができます。現在のスクリプトがあるディレクトリではなく、ディレクトリです。
解決するには、$0
置換を使用します。
cat "$0"
これはより簡単で、現在のディレクトリに関係なく機能します。