質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

2回答

7266閲覧

シェルスクリプトのコマンド出力について

430430Wt

総合スコア37

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2017/02/16 14:11

いつもお世話になっております。

シェルスクリプトを書いているのですが

スクリプト内で
cd /home/
ls -ltr > /tmp/test.log
という感じで書いているのですが
logファイルにはlsの出力結果が書かれます。

実現したいことは
ls -ltr というコマンドを打ったことをログに出力させたいです。

cat /tmp/test.log
ls -ltr
-rwxrwxrwx...(略)
という風に打ったコマンド+出力結果となるようにしたいです。

できる方法はありますでしょうか?
今の所
echo ls -ltr
ls -ltr
位しか思い付きませんでした。
ご存知の方いらっしゃいますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

下記に同様の話題がありました。
http://stackoverflow.com/questions/2853803/in-a-shell-script-echo-shell-commands-as-they-are-executed

これによると、あなたの求めている挙動は-vオプションで実現できるようです。

具体的には以下のように、いくつかの適用方法があるようです。

  • シェルスクリプト1行目を「#!/bin/bash -v」にする
  • シェルスクリプトに「set -v」を追記する
  • 「bash -v script.sh」のように起動する

投稿2017/02/16 15:03

....

総合スコア102

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y.H.

2017/02/17 01:52 編集

この方法を使用してもスクリプト内に記述したリダイレクトでは実行コマンドは出力されないと思います。 $ ls -ald test.sh -rwxrwxr-x 1 hoge fuga 50 2月 17 10:47 2017 test.sh $ cat test.sh #!/bin/bash -v cd $PWD ls -ltr &> /tmp/test.log $ ./test.sh #!/bin/bash -v cd $PWD ls -ltr &> /tmp/test.log $ cat -n /tmp/test.log 1 合計 4 2 -rwxrwxr-x 1 hoge fuga 50 2月 17 10:47 2017 test.sh
guest

0

ベストアンサー

sh(bash)の実行時オプションで-x-vという物があります。違いは、-vがスクリプトに書いた通りに出力するのに対して、-xは変数展開やファイルマッチ展開などを全部して、最終的に実行されるコマンドラインを出力します。
出力は標準エラー出力に出されるので、標準エラーのリダイレクト指定が必要です。下記では&>

Bash

1#!/bin/bash 2cd /home/ 3bash -v -c 'ls -ltr' &> /tmp/test.log

投稿2017/02/17 01:04

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

430430Wt

2017/02/17 15:19

ありがとうございます!できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問